diff --git a/.gitignore b/.gitignore
index f93505b4b8..b2f4277b2c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,7 +16,7 @@ profile.cov
*.out
#Debug
-__debug_bin
+__debug_bin*
debug
sandbox.go
/cmd/dev/
@@ -48,6 +48,7 @@ cmd/zitadel/zitadel
tmp/
console/src/app/proto/generated/
**.pb.go
+!pkg/grpc/protoc/v2/options.pb.go
**.proto.mock.go
**.pb.*.go
**.gen.go
diff --git a/cmd/defaults.yaml b/cmd/defaults.yaml
index 891828941e..7897e12834 100644
--- a/cmd/defaults.yaml
+++ b/cmd/defaults.yaml
@@ -78,13 +78,17 @@ HTTP1HostHeader: "host" # ZITADEL_HTTP1HOSTHEADER
WebAuthNName: ZITADEL # ZITADEL_WEBAUTHN_NAME
Database:
+ # This setting defines the ratio of how many connections defined below
+ # are used to push events. ZITADEL manages two database connection pools
+ # one to push events and one for the remaining queries.
+ EventPushConnRatio: 0.2 # ZITADEL_DATABASE_COCKROACH_EVENTPUSHCONNRATIO
# CockroachDB is the default database of ZITADEL
cockroach:
Host: localhost # ZITADEL_DATABASE_COCKROACH_HOST
Port: 26257 # ZITADEL_DATABASE_COCKROACH_PORT
Database: zitadel # ZITADEL_DATABASE_COCKROACH_DATABASE
- MaxOpenConns: 20 # ZITADEL_DATABASE_COCKROACH_MAXOPENCONNS
- MaxIdleConns: 10 # ZITADEL_DATABASE_COCKROACH_MAXIDLECONNS
+ MaxOpenConns: 40 # ZITADEL_DATABASE_COCKROACH_MAXOPENCONNS
+ MaxIdleConns: 20 # ZITADEL_DATABASE_COCKROACH_MAXIDLECONNS
MaxConnLifetime: 30m # ZITADEL_DATABASE_COCKROACH_MAXCONNLIFETIME
MaxConnIdleTime: 5m # ZITADEL_DATABASE_COCKROACH_MAXCONNIDLETIME
Options: "" # ZITADEL_DATABASE_COCKROACH_OPTIONS
@@ -177,14 +181,16 @@ AssetStorage:
# The Projections section defines the behavior for the scheduled and synchronous events projections.
Projections:
+ # The maximum duration a transaction remains open
+ # before it spots left folding additional events
+ # and updates the table.
+ TransactionDuration: 500ms # ZITADEL_PROJECTIONS_TRANSACTIONDURATION
# Time interval between scheduled projections
RequeueEvery: 60s # ZITADEL_PROJECTIONS_REQUEUEEVERY
# Time between retried database statements resulting from projected events
RetryFailedAfter: 1s # ZITADEL_PROJECTIONS_RETRYFAILED
# Retried execution number of database statements resulting from projected events
MaxFailureCount: 5 # ZITADEL_PROJECTIONS_MAXFAILURECOUNT
- # Number of concurrent projection routines. Values of 0 and below are overwritten to 1
- ConcurrentInstances: 1 # ZITADEL_PROJECTIONS_CONCURRENTINSTANCES
# Limit of returned events per query
BulkLimit: 200 # ZITADEL_PROJECTIONS_BULKLIMIT
# Only instances are projected, for which at least a projection-relevant event exists within the timeframe
@@ -194,11 +200,17 @@ Projections:
# In the Customizations section, all settings from above can be overwritten for each specific projection
Customizations:
Projects:
- BulkLimit: 2000 # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_PROJECTS_BULKLIMIT
+ TransactionDuration: 2s
# The Notifications projection is used for sending emails and SMS to users
Notifications:
# As notification projections don't result in database statements, retries don't have an effect
- MaxFailureCount: 0 # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONS_MAXFAILURECOUNT
+ MaxFailureCount: 10 # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONS_MAXFAILURECOUNT
+ # Sending emails can take longer than 500ms
+ TransactionDuration: 5s # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONS_TRANSACTIONDURATION
+ password_complexities:
+ TransactionDuration: 2s # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_PASSWORD_COMPLEXITIES_TRANSACTIONDURATION
+ lockout_policy:
+ TransactionDuration: 2s # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_LOCKOUT_POLICY_TRANSACTIONDURATION
# The NotificationsQuotas projection is used for calling quota webhooks
NotificationsQuotas:
# In case of failed deliveries, ZITADEL retries to send the data points to the configured endpoints, but only for active instances.
@@ -207,9 +219,13 @@ Projections:
# Defaults to 45 days
HandleActiveInstances: 1080h # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONSQUOTAS_HANDLEACTIVEINSTANCES
# As quota notification projections don't result in database statements, retries don't have an effect
- MaxFailureCount: 0 # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONSQUOTAS_MAXFAILURECOUNT
+ MaxFailureCount: 10 # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONSQUOTAS_MAXFAILURECOUNT
# Quota notifications are not so time critical. Setting RequeueEvery every five minutes doesn't annoy the db too much.
RequeueEvery: 300s # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONSQUOTAS_REQUEUEEVERY
+ # Sending emails can take longer than 500ms
+ TransactionDuration: 5s # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_NOTIFICATIONQUOTAS_TRANSACTIONDURATION
+ milestones:
+ BulkLimit: 50
# The Telemetry projection is used for calling telemetry webhooks
Telemetry:
# In case of failed deliveries, ZITADEL retries to send the data points to the configured endpoints, but only for active instances.
@@ -223,20 +239,34 @@ Projections:
RequeueEvery: 3300s # ZITADEL_PROJECTIONS_CUSTOMIZATIONS_TELEMETRY_REQUEUEEVERY
Auth:
+ # See Projections.BulkLimit
SearchLimit: 1000 # ZITADEL_AUTH_SEARCHLIMIT
Spooler:
- ConcurrentWorkers: 1 # ZITADEL_AUTH_SPOOLER_CONCURRENTWORKERS
- ConcurrentInstances: 1 # ZITADEL_AUTH_SPOOLER_CONCURRENTINSTANCES
- BulkLimit: 10000 # ZITADEL_AUTH_SPOOLER_BULKLIMIT
- FailureCountUntilSkip: 5 # ZITADEL_AUTH_SPOOLER_FAILURECOUNTUNTILSKIP
+ # See Projections.TransationDuration
+ TransactionDuration: 10s #ZITADEL_AUTH_SPOOLER_TRANSACTIONDURATION
+ # See Projections.BulkLimit
+ BulkLimit: 100 #ZITADEL_AUTH_SPOOLER_BULKLIMIT
+ # See Projections.MaxFailureCount
+ FailureCountUntilSkip: 5 #ZITADEL_AUTH_SPOOLER_FAILURECOUNTUNTILSKIP
+ # Only instance are projected, for which at least a projection relevant event exists withing the timeframe
+ # from HandleActiveInstances duration in the past until the projections current time
+ # Defaults to twice the RequeueEvery duration
+ HandleActiveInstances: 120s #ZITADEL_AUTH_SPOOLER_HANDLEACTIVEINSTANCES
Admin:
+ # See Projections.BulkLimit
SearchLimit: 1000 # ZITADEL_ADMIN_SEARCHLIMIT
Spooler:
- ConcurrentWorkers: 1 # ZITADEL_ADMIN_SPOOLER_CONCURRENTWORKERS
- ConcurrentInstances: 1 # ZITADEL_ADMIN_SPOOLER_CONCURRENTINSTANCES
- BulkLimit: 10000 # ZITADEL_ADMIN_SPOOLER_BULKLIMIT
- FailureCountUntilSkip: 5 # ZITADEL_ADMIN_SPOOLER_FAILURECOUNTUNTILSKIP
+ # See Projections.TransationDuration
+ TransactionDuration: 10s
+ # See Projections.BulkLimit
+ BulkLimit: 200
+ # See Projections.MaxFailureCount
+ FailureCountUntilSkip: 5
+ # Only instance are projected, for which at least a projection relevant event exists withing the timeframe
+ # from HandleActiveInstances duration in the past until the projections current time
+ # Defaults to twice the RequeueEvery duration
+ HandleActiveInstances: 120s
UserAgentCookie:
Name: zitadel.useragent # ZITADEL_USERAGENTCOOKIE_NAME
@@ -322,10 +352,12 @@ Console:
Notification:
Repository:
Spooler:
- ConcurrentWorkers: 1 # ZITADEL_NOTIFICATION_REPOSITORY_SPOOLER_CONCURRENTWORKERS
- ConcurrentInstances: 10 # ZITADEL_NOTIFICATION_REPOSITORY_SPOOLER_CONCURRENTINSTANCES
- BulkLimit: 10000 # ZITADEL_NOTIFICATION_REPOSITORY_SPOOLER_BULKLIMIT
- FailureCountUntilSkip: 5 # ZITADEL_NOTIFICATION_REPOSITORY_SPOOLER_FAILURECOUNTUNTILSKIP
+ # See Projections.TransactionDuration
+ TransactionDuration: 10s #ZITADEL_NOTIFICATION_REPOSITORY_SPOOLER_TRANSACTIONDURATION
+ # See Projections.BulkLimit
+ BulkLimit: 200 #ZITADEL_NOTIFICATION_REPOSITORY_SPOOLER_BULKLIMIT
+ # See Projections.MaxFailureCount
+ FailureCountUntilSkip: 5 #ZITADEL_NOTIFICATION_REPOSITORY_SPOOLER_FAILURECOUNTUNTILSKIP
Handlers:
EncryptionKeys:
@@ -477,8 +509,8 @@ Quotas:
MaxBulkSize: 0 # ZITADEL_QUOTAS_EXECUTION_DEBOUNCE_MAXBULKSIZE
Eventstore:
- PushTimeout: 15s # ZITADEL_EVENTSTORE_PUSHTIMEOUT
- AllowOrderByCreationDate: false # ZITADEL_EVENTSTORE_ALLOWORDERBYCREATIONDATE
+ # Sets the maximum duration of transactions pushing events
+ PushTimeout: 15s #ZITADEL_EVENTSTORE_PUSHTIMEOUT
DefaultInstance:
InstanceName: ZITADEL # ZITADEL_DEFAULTINSTANCE_INSTANCENAME
diff --git a/cmd/initialise/helper.go b/cmd/initialise/helper.go
index 943d165086..6c4abd0ebc 100644
--- a/cmd/initialise/helper.go
+++ b/cmd/initialise/helper.go
@@ -1,13 +1,13 @@
package initialise
import (
- "database/sql"
"errors"
"github.com/jackc/pgconn"
+ "github.com/zitadel/zitadel/internal/database"
)
-func exec(db *sql.DB, stmt string, possibleErrCodes []string, args ...interface{}) error {
+func exec(db *database.DB, stmt string, possibleErrCodes []string, args ...interface{}) error {
_, err := db.Exec(stmt, args...)
pgErr := new(pgconn.PgError)
if errors.As(err, &pgErr) {
diff --git a/cmd/initialise/init.go b/cmd/initialise/init.go
index 78baf6c204..69aadd87be 100644
--- a/cmd/initialise/init.go
+++ b/cmd/initialise/init.go
@@ -1,7 +1,6 @@
package initialise
import (
- "database/sql"
"embed"
"github.com/spf13/cobra"
@@ -68,7 +67,7 @@ func InitAll(config *Config) {
logging.OnError(err).Fatal("unable to initialize ZITADEL")
}
-func initialise(config database.Config, steps ...func(*sql.DB) error) error {
+func initialise(config database.Config, steps ...func(*database.DB) error) error {
logging.Info("initialization started")
err := ReadStmts(config.Type())
@@ -76,16 +75,16 @@ func initialise(config database.Config, steps ...func(*sql.DB) error) error {
return err
}
- db, err := database.Connect(config, true)
+ db, err := database.Connect(config, true, false)
if err != nil {
return err
}
defer db.Close()
- return Init(db.DB, steps...)
+ return Init(db, steps...)
}
-func Init(db *sql.DB, steps ...func(*sql.DB) error) error {
+func Init(db *database.DB, steps ...func(*database.DB) error) error {
for _, step := range steps {
if err := step(db); err != nil {
return err
diff --git a/cmd/initialise/init_test.go b/cmd/initialise/init_test.go
index 4a1141345a..5e35c2a382 100644
--- a/cmd/initialise/init_test.go
+++ b/cmd/initialise/init_test.go
@@ -1,17 +1,17 @@
package initialise
import (
- "database/sql"
"database/sql/driver"
"regexp"
"testing"
"github.com/DATA-DOG/go-sqlmock"
+ "github.com/zitadel/zitadel/internal/database"
)
type db struct {
mock sqlmock.Sqlmock
- db *sql.DB
+ db *database.DB
}
func prepareDB(t *testing.T, expectations ...expectation) db {
@@ -25,7 +25,7 @@ func prepareDB(t *testing.T, expectations ...expectation) db {
}
return db{
mock: mock,
- db: client,
+ db: &database.DB{DB: client},
}
}
@@ -42,6 +42,20 @@ func expectExec(stmt string, err error, args ...driver.Value) expectation {
}
}
+func expectQuery(stmt string, err error, columns []string, rows [][]driver.Value, args ...driver.Value) expectation {
+ return func(m sqlmock.Sqlmock) {
+ res := sqlmock.NewRows(columns)
+ for _, row := range rows {
+ res.AddRow(row...)
+ }
+ query := m.ExpectQuery(regexp.QuoteMeta(stmt)).WithArgs(args...).WillReturnRows(res)
+ if err != nil {
+ query.WillReturnError(err)
+ return
+ }
+ }
+}
+
func expectBegin(err error) expectation {
return func(m sqlmock.Sqlmock) {
query := m.ExpectBegin()
diff --git a/cmd/initialise/sql/cockroach/03_grant_user.sql b/cmd/initialise/sql/cockroach/03_grant_user.sql
index e218323934..161b2f5ba4 100644
--- a/cmd/initialise/sql/cockroach/03_grant_user.sql
+++ b/cmd/initialise/sql/cockroach/03_grant_user.sql
@@ -1,3 +1,4 @@
-- replace the first %[1]s with the database
-- replace the second \%[2]s with the user
-GRANT ALL ON DATABASE %[1]s TO %[2]s
\ No newline at end of file
+GRANT ALL ON DATABASE %[1]s TO %[2]s;
+GRANT SYSTEM VIEWACTIVITY TO %[2]s;
\ No newline at end of file
diff --git a/cmd/initialise/sql/cockroach/08_events_table.sql b/cmd/initialise/sql/cockroach/08_events_table.sql
index 78c1fba585..00eba689f3 100644
--- a/cmd/initialise/sql/cockroach/08_events_table.sql
+++ b/cmd/initialise/sql/cockroach/08_events_table.sql
@@ -1,27 +1,21 @@
-SET experimental_enable_hash_sharded_indexes = on;
+CREATE TABLE IF NOT EXISTS eventstore.events2 (
+ instance_id TEXT NOT NULL
+ , aggregate_type TEXT NOT NULL
+ , aggregate_id TEXT NOT NULL
+
+ , event_type TEXT NOT NULL
+ , "sequence" BIGINT NOT NULL
+ , revision SMALLINT NOT NULL
+ , created_at TIMESTAMPTZ NOT NULL
+ , payload JSONB
+ , creator TEXT NOT NULL
+ , "owner" TEXT NOT NULL
+
+ , "position" DECIMAL NOT NULL
+ , in_tx_order INTEGER NOT NULL
-CREATE TABLE IF NOT EXISTS eventstore.events (
- id UUID DEFAULT gen_random_uuid()
- , event_type TEXT NOT NULL
- , aggregate_type TEXT NOT NULL
- , aggregate_id TEXT NOT NULL
- , aggregate_version TEXT NOT NULL
- , event_sequence BIGINT NOT NULL
- , previous_aggregate_sequence BIGINT
- , previous_aggregate_type_sequence INT8
- , creation_date TIMESTAMPTZ NOT NULL DEFAULT now()
- , event_data JSONB
- , editor_user TEXT NOT NULL
- , editor_service TEXT NOT NULL
- , resource_owner TEXT NOT NULL
- , instance_id TEXT NOT NULL
-
- , PRIMARY KEY (event_sequence DESC, instance_id) USING HASH WITH BUCKET_COUNT = 10
- , INDEX agg_type_agg_id (aggregate_type, aggregate_id, instance_id)
- , INDEX agg_type (aggregate_type, instance_id)
- , INDEX agg_type_seq (aggregate_type, event_sequence DESC, instance_id)
- STORING (id, event_type, aggregate_id, aggregate_version, previous_aggregate_sequence, creation_date, event_data, editor_user, editor_service, resource_owner, previous_aggregate_type_sequence)
- , INDEX max_sequence (aggregate_type, aggregate_id, event_sequence DESC, instance_id)
- , CONSTRAINT previous_sequence_unique UNIQUE (previous_aggregate_sequence DESC, instance_id)
- , CONSTRAINT prev_agg_type_seq_unique UNIQUE(previous_aggregate_type_sequence, instance_id)
-);
\ No newline at end of file
+ , PRIMARY KEY (instance_id, aggregate_type, aggregate_id, "sequence")
+ , INDEX es_active_instances (created_at DESC) STORING ("position")
+ , INDEX es_wm (aggregate_id, instance_id, aggregate_type, event_type)
+ , INDEX es_projection (instance_id, aggregate_type, event_type, "position" DESC)
+);
diff --git a/cmd/initialise/sql/postgres/08_events_table.sql b/cmd/initialise/sql/postgres/08_events_table.sql
index 61474e0772..d978df5d9f 100644
--- a/cmd/initialise/sql/postgres/08_events_table.sql
+++ b/cmd/initialise/sql/postgres/08_events_table.sql
@@ -1,25 +1,22 @@
-CREATE TABLE IF NOT EXISTS eventstore.events (
- id UUID DEFAULT gen_random_uuid()
- , event_type TEXT NOT NULL
- , aggregate_type TEXT NOT NULL
- , aggregate_id TEXT NOT NULL
- , aggregate_version TEXT NOT NULL
- , event_sequence BIGINT NOT NULL
- , previous_aggregate_sequence BIGINT
- , previous_aggregate_type_sequence INT8
- , creation_date TIMESTAMPTZ NOT NULL DEFAULT now()
- , event_data JSONB
- , editor_user TEXT NOT NULL
- , editor_service TEXT NOT NULL
- , resource_owner TEXT NOT NULL
- , instance_id TEXT NOT NULL
+CREATE TABLE IF NOT EXISTS eventstore.events2 (
+ instance_id TEXT NOT NULL
+ , aggregate_type TEXT NOT NULL
+ , aggregate_id TEXT NOT NULL
+
+ , event_type TEXT NOT NULL
+ , "sequence" BIGINT NOT NULL
+ , revision SMALLINT NOT NULL
+ , created_at TIMESTAMPTZ NOT NULL
+ , payload JSONB
+ , creator TEXT NOT NULL
+ , "owner" TEXT NOT NULL
+
+ , "position" DECIMAL NOT NULL
+ , in_tx_order INTEGER NOT NULL
- , PRIMARY KEY (event_sequence, instance_id)
- , CONSTRAINT previous_sequence_unique UNIQUE(previous_aggregate_sequence, instance_id)
- , CONSTRAINT prev_agg_type_seq_unique UNIQUE(previous_aggregate_type_sequence, instance_id)
+ , PRIMARY KEY (instance_id, aggregate_type, aggregate_id, "sequence")
);
-CREATE INDEX IF NOT EXISTS agg_type_agg_id ON eventstore.events (aggregate_type, aggregate_id, instance_id);
-CREATE INDEX IF NOT EXISTS agg_type ON eventstore.events (aggregate_type, instance_id);
-CREATE INDEX IF NOT EXISTS agg_type_seq ON eventstore.events (aggregate_type, event_sequence DESC, instance_id);
-CREATE INDEX IF NOT EXISTS max_sequence ON eventstore.events (aggregate_type, aggregate_id, event_sequence DESC, instance_id);
+CREATE INDEX IF NOT EXISTS es_active_instances ON eventstore.events2 (created_at DESC, instance_id);
+CREATE INDEX IF NOT EXISTS es_wm ON eventstore.events2 (aggregate_id, instance_id, aggregate_type, event_type);
+CREATE INDEX IF NOT EXISTS es_projection ON eventstore.events2 (instance_id, aggregate_type, event_type, "position");
\ No newline at end of file
diff --git a/cmd/initialise/verify_database.go b/cmd/initialise/verify_database.go
index 5bdb8a1421..089d345828 100644
--- a/cmd/initialise/verify_database.go
+++ b/cmd/initialise/verify_database.go
@@ -1,13 +1,14 @@
package initialise
import (
- "database/sql"
_ "embed"
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/database"
)
func newDatabase() *cobra.Command {
@@ -33,8 +34,8 @@ The user provided by flags needs priviledge to
}
}
-func VerifyDatabase(databaseName string) func(*sql.DB) error {
- return func(db *sql.DB) error {
+func VerifyDatabase(databaseName string) func(*database.DB) error {
+ return func(db *database.DB) error {
logging.WithFields("database", databaseName).Info("verify database")
return exec(db, fmt.Sprintf(string(databaseStmt), databaseName), []string{dbAlreadyExistsCode})
diff --git a/cmd/initialise/verify_grant.go b/cmd/initialise/verify_grant.go
index 5b89e9b727..b7acc15d9f 100644
--- a/cmd/initialise/verify_grant.go
+++ b/cmd/initialise/verify_grant.go
@@ -1,13 +1,14 @@
package initialise
import (
- "database/sql"
_ "embed"
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/database"
)
func newGrant() *cobra.Command {
@@ -28,8 +29,8 @@ Prereqesits:
}
}
-func VerifyGrant(databaseName, username string) func(*sql.DB) error {
- return func(db *sql.DB) error {
+func VerifyGrant(databaseName, username string) func(*database.DB) error {
+ return func(db *database.DB) error {
logging.WithFields("user", username, "database", databaseName).Info("verify grant")
return exec(db, fmt.Sprintf(grantStmt, databaseName, username), nil)
diff --git a/cmd/initialise/verify_user.go b/cmd/initialise/verify_user.go
index 702b51f126..c2be12b7e6 100644
--- a/cmd/initialise/verify_user.go
+++ b/cmd/initialise/verify_user.go
@@ -1,13 +1,14 @@
package initialise
import (
- "database/sql"
_ "embed"
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/database"
)
func newUser() *cobra.Command {
@@ -33,8 +34,8 @@ The user provided by flags needs priviledge to
}
}
-func VerifyUser(username, password string) func(*sql.DB) error {
- return func(db *sql.DB) error {
+func VerifyUser(username, password string) func(*database.DB) error {
+ return func(db *database.DB) error {
logging.WithFields("username", username).Info("verify user")
if password != "" {
diff --git a/cmd/initialise/verify_zitadel.go b/cmd/initialise/verify_zitadel.go
index 74fe2a2467..1128227ce8 100644
--- a/cmd/initialise/verify_zitadel.go
+++ b/cmd/initialise/verify_zitadel.go
@@ -1,14 +1,13 @@
package initialise
import (
- "database/sql"
_ "embed"
"fmt"
"github.com/spf13/cobra"
"github.com/spf13/viper"
-
"github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/database"
)
@@ -29,58 +28,66 @@ Prereqesits:
}
}
-func VerifyZitadel(db *sql.DB, config database.Config) error {
+func VerifyZitadel(db *database.DB, config database.Config) error {
err := ReadStmts(config.Type())
if err != nil {
return err
}
+ logging.WithFields().Info("verify system")
if err := exec(db, fmt.Sprintf(createSystemStmt, config.Username()), nil); err != nil {
return err
}
+ logging.WithFields().Info("verify encryption keys")
if err := createEncryptionKeys(db); err != nil {
return err
}
+ logging.WithFields().Info("verify projections")
if err := exec(db, fmt.Sprintf(createProjectionsStmt, config.Username()), nil); err != nil {
return err
}
+ logging.WithFields().Info("verify eventstore")
if err := exec(db, fmt.Sprintf(createEventstoreStmt, config.Username()), nil); err != nil {
return err
}
+ logging.WithFields().Info("verify events tables")
if err := createEvents(db); err != nil {
return err
}
+ logging.WithFields().Info("verify system sequence")
if err := exec(db, createSystemSequenceStmt, nil); err != nil {
return err
}
+ logging.WithFields().Info("verify unique constraints")
if err := exec(db, createUniqueConstraints, nil); err != nil {
return err
}
+
return nil
}
func verifyZitadel(config database.Config) error {
logging.WithFields("database", config.DatabaseName()).Info("verify zitadel")
- db, err := database.Connect(config, false)
+ db, err := database.Connect(config, false, false)
if err != nil {
return err
}
- if err := VerifyZitadel(db.DB, config); err != nil {
+ if err := VerifyZitadel(db, config); err != nil {
return err
}
return db.Close()
}
-func createEncryptionKeys(db *sql.DB) error {
+func createEncryptionKeys(db *database.DB) error {
tx, err := db.Begin()
if err != nil {
return err
@@ -93,16 +100,29 @@ func createEncryptionKeys(db *sql.DB) error {
return tx.Commit()
}
-func createEvents(db *sql.DB) error {
+func createEvents(db *database.DB) (err error) {
tx, err := db.Begin()
if err != nil {
return err
}
+ defer func() {
+ if err != nil {
+ rollbackErr := tx.Rollback()
+ logging.OnError(rollbackErr).Debug("rollback failed")
+ return
+ }
+ err = tx.Commit()
+ }()
- if _, err = tx.Exec(createEventsStmt); err != nil {
- tx.Rollback()
+ // if events already exists events2 is created during a setup job
+ var count int
+ row := tx.QueryRow("SELECT count(*) FROM information_schema.tables WHERE table_schema = 'eventstore' AND table_name like 'events%'")
+ if err = row.Scan(&count); err != nil {
return err
}
-
- return tx.Commit()
+ if row.Err() != nil || count >= 1 {
+ return row.Err()
+ }
+ _, err = tx.Exec(createEventsStmt)
+ return err
}
diff --git a/cmd/initialise/verify_zitadel_test.go b/cmd/initialise/verify_zitadel_test.go
index d4dd552d38..4631396e29 100644
--- a/cmd/initialise/verify_zitadel_test.go
+++ b/cmd/initialise/verify_zitadel_test.go
@@ -2,6 +2,7 @@ package initialise
import (
"database/sql"
+ "database/sql/driver"
"errors"
"testing"
)
@@ -30,11 +31,53 @@ func Test_verifyEvents(t *testing.T) {
},
targetErr: sql.ErrConnDone,
},
+ {
+ name: "events already exists",
+ args: args{
+ db: prepareDB(t,
+ expectBegin(nil),
+ expectQuery(
+ "SELECT count(*) FROM information_schema.tables WHERE table_schema = 'eventstore' AND table_name like 'events%'",
+ nil,
+ []string{"count"},
+ [][]driver.Value{
+ {1},
+ },
+ ),
+ expectCommit(nil),
+ ),
+ },
+ },
+ {
+ name: "events and events2 already exists",
+ args: args{
+ db: prepareDB(t,
+ expectBegin(nil),
+ expectQuery(
+ "SELECT count(*) FROM information_schema.tables WHERE table_schema = 'eventstore' AND table_name like 'events%'",
+ nil,
+ []string{"count"},
+ [][]driver.Value{
+ {2},
+ },
+ ),
+ expectCommit(nil),
+ ),
+ },
+ },
{
name: "create table fails",
args: args{
db: prepareDB(t,
expectBegin(nil),
+ expectQuery(
+ "SELECT count(*) FROM information_schema.tables WHERE table_schema = 'eventstore' AND table_name like 'events%'",
+ nil,
+ []string{"count"},
+ [][]driver.Value{
+ {0},
+ },
+ ),
expectExec(createEventsStmt, sql.ErrNoRows),
expectRollback(nil),
),
@@ -46,6 +89,14 @@ func Test_verifyEvents(t *testing.T) {
args: args{
db: prepareDB(t,
expectBegin(nil),
+ expectQuery(
+ "SELECT count(*) FROM information_schema.tables WHERE table_schema = 'eventstore' AND table_name like 'events%'",
+ nil,
+ []string{"count"},
+ [][]driver.Value{
+ {0},
+ },
+ ),
expectExec(createEventsStmt, nil),
expectCommit(nil),
),
diff --git a/cmd/key/key.go b/cmd/key/key.go
index 02fa272a8a..5abd3a47c8 100644
--- a/cmd/key/key.go
+++ b/cmd/key/key.go
@@ -124,7 +124,7 @@ func openFile(fileName string) (io.Reader, error) {
}
func keyStorage(config database.Config, masterKey string) (crypto.KeyStorage, error) {
- db, err := database.Connect(config, false)
+ db, err := database.Connect(config, false, false)
if err != nil {
return nil, err
}
diff --git a/cmd/setup/01_sql/adminapi.sql b/cmd/setup/01_sql/adminapi.sql
index 1ef135e744..cb0db84afc 100644
--- a/cmd/setup/01_sql/adminapi.sql
+++ b/cmd/setup/01_sql/adminapi.sql
@@ -12,7 +12,7 @@ CREATE TABLE adminapi.locks (
CREATE TABLE adminapi.current_sequences (
view_name TEXT,
current_sequence BIGINT,
- event_timestamp TIMESTAMPTZ,
+ event_date TIMESTAMPTZ,
last_successful_spooler_run TIMESTAMPTZ,
instance_id TEXT NOT NULL,
diff --git a/cmd/setup/01_sql/auth.sql b/cmd/setup/01_sql/auth.sql
index 0a2bba226a..93a06c599a 100644
--- a/cmd/setup/01_sql/auth.sql
+++ b/cmd/setup/01_sql/auth.sql
@@ -12,7 +12,7 @@ CREATE TABLE auth.locks (
CREATE TABLE auth.current_sequences (
view_name TEXT,
current_sequence BIGINT,
- event_timestamp TIMESTAMPTZ,
+ event_date TIMESTAMPTZ,
last_successful_spooler_run TIMESTAMPTZ,
instance_id TEXT NOT NULL,
diff --git a/cmd/setup/04.go b/cmd/setup/04.go
deleted file mode 100644
index e9af05ee46..0000000000
--- a/cmd/setup/04.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package setup
-
-import (
- "embed"
-
- "github.com/zitadel/zitadel/internal/database"
-)
-
-var (
- //go:embed 04/cockroach/index.sql
- //go:embed 04/postgres/index.sql
- stmts04 embed.FS
-)
-
-func New04(db *database.DB) *EventstoreIndexesNew {
- return &EventstoreIndexesNew{
- dbClient: db,
- name: "04_eventstore_indexes",
- step: "04",
- fileName: "index.sql",
- stmts: stmts04,
- }
-}
diff --git a/cmd/setup/04/cockroach/index.sql b/cmd/setup/04/cockroach/index.sql
deleted file mode 100644
index f68ed948a5..0000000000
--- a/cmd/setup/04/cockroach/index.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-CREATE INDEX IF NOT EXISTS write_model ON eventstore.events (instance_id, aggregate_type, aggregate_id, event_type, resource_owner)
- STORING (id, aggregate_version, previous_aggregate_sequence, creation_date, event_data, editor_user, editor_service, previous_aggregate_type_sequence);
-
-CREATE INDEX IF NOT EXISTS active_instances ON eventstore.events (creation_date desc, instance_id) USING HASH;
diff --git a/cmd/setup/04/postgres/index.sql b/cmd/setup/04/postgres/index.sql
deleted file mode 100644
index d4c933ece8..0000000000
--- a/cmd/setup/04/postgres/index.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE INDEX IF NOT EXISTS write_model ON eventstore.events (instance_id, aggregate_type, aggregate_id, event_type, resource_owner);
-
-CREATE INDEX IF NOT EXISTS active_instances ON eventstore.events (creation_date, instance_id);
diff --git a/cmd/setup/09.go b/cmd/setup/09.go
deleted file mode 100644
index 1d12a86a74..0000000000
--- a/cmd/setup/09.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package setup
-
-import (
- "embed"
-
- "github.com/zitadel/zitadel/internal/database"
-)
-
-var (
- //go:embed 09/cockroach/index.sql
- //go:embed 09/postgres/index.sql
- stmts09 embed.FS
-)
-
-func New09(db *database.DB) *EventstoreIndexesNew {
- return &EventstoreIndexesNew{
- dbClient: db,
- name: "09_optimise_indexes",
- step: "09",
- fileName: "index.sql",
- stmts: stmts09,
- }
-}
diff --git a/cmd/setup/09/cockroach/index.sql b/cmd/setup/09/cockroach/index.sql
deleted file mode 100644
index 1cc161ed10..0000000000
--- a/cmd/setup/09/cockroach/index.sql
+++ /dev/null
@@ -1,51 +0,0 @@
--- replace agg_type_agg_id
-BEGIN;
-DROP INDEX IF EXISTS eventstore.events@agg_type_agg_id;
-COMMIT;
-
-BEGIN;
-CREATE INDEX agg_type_agg_id ON eventstore.events (
- instance_id
- , aggregate_type
- , aggregate_id
-) STORING (
- event_type
- , aggregate_version
- , previous_aggregate_sequence
- , previous_aggregate_type_sequence
- , creation_date
- , event_data
- , editor_user
- , editor_service
- , resource_owner
-);
-COMMIT;
-
--- replace agg_type
-BEGIN;
-DROP INDEX IF EXISTS eventstore.events@agg_type;
-COMMIT;
-
-BEGIN;
-CREATE INDEX agg_type ON eventstore.events (
- instance_id
- , aggregate_type
- , event_sequence
-) STORING (
- event_type
- , aggregate_id
- , aggregate_version
- , previous_aggregate_sequence
- , previous_aggregate_type_sequence
- , creation_date
- , event_data
- , editor_user
- , editor_service
- , resource_owner
-);
-COMMIT;
-
--- drop unused index
-BEGIN;
-DROP INDEX IF EXISTS eventstore.events@agg_type_seq;
-COMMIT;
diff --git a/cmd/setup/09/postgres/index.sql b/cmd/setup/09/postgres/index.sql
deleted file mode 100644
index d5207c15dd..0000000000
--- a/cmd/setup/09/postgres/index.sql
+++ /dev/null
@@ -1,30 +0,0 @@
--- replace agg_type_agg_id
-BEGIN;
-DROP INDEX IF EXISTS eventstore.agg_type_agg_id;
-COMMIT;
-
-BEGIN;
-CREATE INDEX agg_type_agg_id ON eventstore.events (
- instance_id
- , aggregate_type
- , aggregate_id
-);
-COMMIT;
-
--- replace agg_type
-BEGIN;
-DROP INDEX IF EXISTS eventstore.agg_type;
-COMMIT;
-
-BEGIN;
-CREATE INDEX agg_type ON eventstore.events (
- instance_id
- , aggregate_type
- , event_sequence
-);
-COMMIT;
-
--- drop unused index
-BEGIN;
-DROP INDEX IF EXISTS eventstore.agg_type_seq;
-COMMIT;
diff --git a/cmd/setup/10.go b/cmd/setup/10.go
index 16d14d3d09..9f3d89cbd2 100644
--- a/cmd/setup/10.go
+++ b/cmd/setup/10.go
@@ -3,7 +3,7 @@ package setup
import (
"context"
"database/sql"
- _ "embed"
+ "embed"
"time"
"github.com/cockroachdb/cockroach-go/v2/crdb"
@@ -17,8 +17,9 @@ var (
correctCreationDate10CreateTable string
//go:embed 10/10_fill_table.sql
correctCreationDate10FillTable string
- //go:embed 10/10_update.sql
- correctCreationDate10Update string
+ //go:embed 10/cockroach/10_update.sql
+ //go:embed 10/postgres/10_update.sql
+ correctCreationDate10Update embed.FS
//go:embed 10/10_count_wrong_events.sql
correctCreationDate10CountWrongEvents string
//go:embed 10/10_empty_table.sql
@@ -34,7 +35,8 @@ func (mig *CorrectCreationDate) Execute(ctx context.Context) (err error) {
ctx, cancel := context.WithTimeout(ctx, mig.FailAfter)
defer cancel()
- for {
+ for i := 0; ; i++ {
+ logging.WithFields("mig", mig.String(), "iteration", i).Debug("start iteration")
var affected int64
err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error {
if mig.dbClient.Type() == "cockroach" {
@@ -46,6 +48,7 @@ func (mig *CorrectCreationDate) Execute(ctx context.Context) (err error) {
if err != nil {
return err
}
+ logging.WithFields("mig", mig.String(), "iteration", i).Debug("temp table created")
_, err = tx.ExecContext(ctx, correctCreationDate10Truncate)
if err != nil {
@@ -55,19 +58,25 @@ func (mig *CorrectCreationDate) Execute(ctx context.Context) (err error) {
if err != nil {
return err
}
+ logging.WithFields("mig", mig.String(), "iteration", i).Debug("temp table filled")
res := tx.QueryRowContext(ctx, correctCreationDate10CountWrongEvents)
if err := res.Scan(&affected); err != nil || affected == 0 {
return err
}
- _, err = tx.ExecContext(ctx, correctCreationDate10Update)
+ updateStmt, err := readStmt(correctCreationDate10Update, "10", mig.dbClient.Type(), "10_update.sql")
if err != nil {
return err
}
- logging.WithFields("count", affected).Info("creation dates changed")
+ _, err = tx.ExecContext(ctx, updateStmt)
+ if err != nil {
+ return err
+ }
+ logging.WithFields("mig", mig.String(), "iteration", i, "count", affected).Debug("creation dates updated")
return nil
})
+ logging.WithFields("mig", mig.String(), "iteration", i).Debug("end iteration")
if affected == 0 || err != nil {
return err
}
diff --git a/cmd/setup/10/10_create_temp_table.sql b/cmd/setup/10/10_create_temp_table.sql
index fb823b2ecf..702cd072a1 100644
--- a/cmd/setup/10/10_create_temp_table.sql
+++ b/cmd/setup/10/10_create_temp_table.sql
@@ -1,4 +1,4 @@
-CREATE temporary TABLE IF NOT EXISTS wrong_events (
+CREATE TEMPORARY TABLE IF NOT EXISTS wrong_events (
instance_id TEXT
, event_sequence BIGINT
, current_cd TIMESTAMPTZ
diff --git a/cmd/setup/10/10_fill_table.sql b/cmd/setup/10/10_fill_table.sql
index b2ac9e3079..2db4c8589d 100644
--- a/cmd/setup/10/10_fill_table.sql
+++ b/cmd/setup/10/10_fill_table.sql
@@ -10,6 +10,8 @@ INSERT INTO wrong_events (
) AS next_cd
FROM
eventstore.events
+ WHERE
+ "position" IS NULL
) sub WHERE
current_cd < next_cd
ORDER BY
diff --git a/cmd/setup/10/10_update.sql b/cmd/setup/10/10_update.sql
deleted file mode 100644
index 5254ba8dda..0000000000
--- a/cmd/setup/10/10_update.sql
+++ /dev/null
@@ -1 +0,0 @@
-UPDATE eventstore.events e SET creation_date = we.next_cd FROM wrong_events we WHERE e.event_sequence = we.event_sequence and e.instance_id = we.instance_id;
diff --git a/cmd/setup/10/cockroach/10_update.sql b/cmd/setup/10/cockroach/10_update.sql
new file mode 100644
index 0000000000..9e7d7f993a
--- /dev/null
+++ b/cmd/setup/10/cockroach/10_update.sql
@@ -0,0 +1 @@
+UPDATE eventstore.events e SET (creation_date, "position") = (we.next_cd, we.next_cd::DECIMAL) FROM wrong_events we WHERE e.event_sequence = we.event_sequence AND e.instance_id = we.instance_id;
diff --git a/cmd/setup/10/postgres/10_update.sql b/cmd/setup/10/postgres/10_update.sql
new file mode 100644
index 0000000000..bc61b692cf
--- /dev/null
+++ b/cmd/setup/10/postgres/10_update.sql
@@ -0,0 +1,10 @@
+UPDATE
+ eventstore.events e
+SET
+ creation_date = we.next_cd
+ , "position" = (EXTRACT(EPOCH FROM we.next_cd))
+FROM
+ wrong_events we
+WHERE
+ e.event_sequence = we.event_sequence
+ AND e.instance_id = we.instance_id;
diff --git a/cmd/setup/11.go b/cmd/setup/11.go
deleted file mode 100644
index 917f479e06..0000000000
--- a/cmd/setup/11.go
+++ /dev/null
@@ -1,92 +0,0 @@
-package setup
-
-import (
- "context"
- "database/sql"
- "embed"
-
- "github.com/cockroachdb/cockroach-go/v2/crdb"
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/database"
-)
-
-var (
- //go:embed 11/11_add_column.sql
- addEventCreatedAt string
- //go:embed 11/11_update_events.sql
- setCreatedAt string
- //go:embed 11/11_set_column.sql
- setCreatedAtDetails string
- //go:embed 11/postgres/create_index.sql
- //go:embed 11/cockroach/create_index.sql
- createdAtIndexCreateStmt embed.FS
- //go:embed 11/postgres/drop_index.sql
- //go:embed 11/cockroach/drop_index.sql
- createdAtIndexDropStmt embed.FS
-)
-
-type AddEventCreatedAt struct {
- BulkAmount int
- step10 *CorrectCreationDate
- dbClient *database.DB
-}
-
-func (mig *AddEventCreatedAt) Execute(ctx context.Context) error {
- // execute step 10 again because events created after the first execution of step 10
- // could still have the wrong ordering of sequences and creation date
- if err := mig.step10.Execute(ctx); err != nil {
- return err
- }
- _, err := mig.dbClient.ExecContext(ctx, addEventCreatedAt)
- if err != nil {
- return err
- }
-
- createIndex, err := readStmt(createdAtIndexCreateStmt, "11", mig.dbClient.Type(), "create_index.sql")
- if err != nil {
- return err
- }
- _, err = mig.dbClient.ExecContext(ctx, createIndex)
- if err != nil {
- return err
- }
-
- for i := 0; ; i++ {
- var affected int64
- err = crdb.ExecuteTx(ctx, mig.dbClient.DB, nil, func(tx *sql.Tx) error {
- res, err := tx.Exec(setCreatedAt, mig.BulkAmount)
- if err != nil {
- return err
- }
-
- affected, _ = res.RowsAffected()
- return nil
- })
- if err != nil {
- return err
- }
- logging.WithFields("step", "11", "iteration", i, "affected", affected).Info("set created_at iteration done")
- if affected < int64(mig.BulkAmount) {
- break
- }
- }
-
- logging.Info("set details")
- _, err = mig.dbClient.ExecContext(ctx, setCreatedAtDetails)
- if err != nil {
- return err
- }
-
- dropIndex, err := readStmt(createdAtIndexDropStmt, "11", mig.dbClient.Type(), "drop_index.sql")
- if err != nil {
- return err
- }
- _, err = mig.dbClient.ExecContext(ctx, dropIndex)
-
- return err
-}
-
-func (mig *AddEventCreatedAt) String() string {
- return "11_event_created_at"
-}
diff --git a/cmd/setup/11/11_add_column.sql b/cmd/setup/11/11_add_column.sql
deleted file mode 100644
index 0ba49b3d1f..0000000000
--- a/cmd/setup/11/11_add_column.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-BEGIN;
--- create table with empty created_at
-ALTER TABLE eventstore.events ADD COLUMN IF NOT EXISTS created_at TIMESTAMPTZ DEFAULT NULL;
--- set column rules
-ALTER TABLE eventstore.events ALTER COLUMN created_at SET DEFAULT clock_timestamp();
-COMMIT;
\ No newline at end of file
diff --git a/cmd/setup/11/11_set_column.sql b/cmd/setup/11/11_set_column.sql
deleted file mode 100644
index 108bd182bc..0000000000
--- a/cmd/setup/11/11_set_column.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-BEGIN;
-ALTER TABLE eventstore.events ALTER COLUMN created_at SET NOT NULL;
-COMMIT;
\ No newline at end of file
diff --git a/cmd/setup/11/11_update_events.sql b/cmd/setup/11/11_update_events.sql
deleted file mode 100644
index 15a3df8a07..0000000000
--- a/cmd/setup/11/11_update_events.sql
+++ /dev/null
@@ -1,21 +0,0 @@
-UPDATE eventstore.events SET
- created_at = creation_date
-FROM (
- SELECT
- e.event_sequence as seq
- , e.instance_id as i_id
- , e.creation_date as cd
- FROM
- eventstore.events e
- WHERE
- created_at IS NULL
- ORDER BY
- event_sequence ASC
- , instance_id
- LIMIT $1
-) AS e
-WHERE
- e.seq = eventstore.events.event_sequence
- AND e.i_id = eventstore.events.instance_id
- AND e.cd = eventstore.events.creation_date
-;
\ No newline at end of file
diff --git a/cmd/setup/11/cockroach/create_index.sql b/cmd/setup/11/cockroach/create_index.sql
deleted file mode 100644
index 6fdd768a30..0000000000
--- a/cmd/setup/11/cockroach/create_index.sql
+++ /dev/null
@@ -1,8 +0,0 @@
-CREATE INDEX IF NOT EXISTS ca_fill_idx ON eventstore.events (
- event_sequence DESC
- , instance_id
-) STORING (
- id
- , creation_date
- , created_at
-) WHERE created_at IS NULL;
\ No newline at end of file
diff --git a/cmd/setup/11/cockroach/drop_index.sql b/cmd/setup/11/cockroach/drop_index.sql
deleted file mode 100644
index da91018d7b..0000000000
--- a/cmd/setup/11/cockroach/drop_index.sql
+++ /dev/null
@@ -1 +0,0 @@
-DROP INDEX IF EXISTS eventstore.events@ca_fill_idx;
\ No newline at end of file
diff --git a/cmd/setup/11/postgres/create_index.sql b/cmd/setup/11/postgres/create_index.sql
deleted file mode 100644
index a6fb37c99f..0000000000
--- a/cmd/setup/11/postgres/create_index.sql
+++ /dev/null
@@ -1,4 +0,0 @@
-CREATE INDEX IF NOT EXISTS ca_fill_idx ON eventstore.events (
- event_sequence DESC
- , instance_id
-) WHERE created_at IS NULL;
\ No newline at end of file
diff --git a/cmd/setup/11/postgres/drop_index.sql b/cmd/setup/11/postgres/drop_index.sql
deleted file mode 100644
index acfe2f49b9..0000000000
--- a/cmd/setup/11/postgres/drop_index.sql
+++ /dev/null
@@ -1 +0,0 @@
-DROP INDEX IF EXISTS eventstore.ca_fill_idx;
\ No newline at end of file
diff --git a/cmd/setup/14.go b/cmd/setup/14.go
new file mode 100644
index 0000000000..2647d83eec
--- /dev/null
+++ b/cmd/setup/14.go
@@ -0,0 +1,72 @@
+package setup
+
+import (
+ "context"
+ "database/sql"
+ "embed"
+ "errors"
+ "strings"
+
+ "github.com/jackc/pgconn"
+ "github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/database"
+)
+
+var (
+ //go:embed 14/cockroach/*.sql
+ //go:embed 14/postgres/*.sql
+ newEventsTable embed.FS
+)
+
+type NewEventsTable struct {
+ dbClient *database.DB
+}
+
+func (mig *NewEventsTable) Execute(ctx context.Context) error {
+ migrations, err := newEventsTable.ReadDir("14/" + mig.dbClient.Type())
+ if err != nil {
+ return err
+ }
+ // if events already exists events2 is created during a setup job
+ var count int
+ err = mig.dbClient.QueryRow(
+ func(row *sql.Row) error {
+ if err = row.Scan(&count); err != nil {
+ return err
+ }
+ return row.Err()
+ },
+ "SELECT count(*) FROM information_schema.tables WHERE table_schema = 'eventstore' AND table_name like 'events2'",
+ )
+ if err != nil || count == 1 {
+ return err
+ }
+ for _, migration := range migrations {
+ stmt, err := readStmt(newEventsTable, "14", mig.dbClient.Type(), migration.Name())
+ if err != nil {
+ return err
+ }
+ stmt = strings.ReplaceAll(stmt, "{{.username}}", mig.dbClient.Username())
+
+ logging.WithFields("migration", mig.String(), "file", migration.Name()).Debug("execute statement")
+
+ _, err = mig.dbClient.ExecContext(ctx, stmt)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (mig *NewEventsTable) String() string {
+ return "14_events_push"
+}
+
+func (mig *NewEventsTable) ContinueOnErr(err error) bool {
+ pgErr := new(pgconn.PgError)
+ if errors.As(err, &pgErr) {
+ return pgErr.Code == "42P01"
+ }
+ return false
+}
diff --git a/cmd/setup/14/cockroach/01_disable_inserts.sql b/cmd/setup/14/cockroach/01_disable_inserts.sql
new file mode 100644
index 0000000000..0f3c277eba
--- /dev/null
+++ b/cmd/setup/14/cockroach/01_disable_inserts.sql
@@ -0,0 +1 @@
+ALTER TABLE eventstore.events RENAME TO events_old;
\ No newline at end of file
diff --git a/cmd/setup/14/cockroach/02_create_and_fill_events2.sql b/cmd/setup/14/cockroach/02_create_and_fill_events2.sql
new file mode 100644
index 0000000000..300ac4b621
--- /dev/null
+++ b/cmd/setup/14/cockroach/02_create_and_fill_events2.sql
@@ -0,0 +1,33 @@
+CREATE TABLE eventstore.events2 (
+ instance_id,
+ aggregate_type,
+ aggregate_id,
+
+ event_type,
+ "sequence",
+ revision,
+ created_at,
+ payload,
+ creator,
+ "owner",
+
+ "position",
+ in_tx_order,
+
+ PRIMARY KEY (instance_id, aggregate_type, aggregate_id, "sequence")
+) AS SELECT
+ instance_id,
+ aggregate_type,
+ aggregate_id,
+
+ event_type,
+ event_sequence,
+ substr(aggregate_version, 2)::SMALLINT,
+ creation_date,
+ event_data,
+ editor_user,
+ resource_owner,
+
+ creation_date::DECIMAL,
+ event_sequence
+FROM eventstore.events_old;
\ No newline at end of file
diff --git a/cmd/setup/14/cockroach/03_constraints.sql b/cmd/setup/14/cockroach/03_constraints.sql
new file mode 100644
index 0000000000..62f119cc43
--- /dev/null
+++ b/cmd/setup/14/cockroach/03_constraints.sql
@@ -0,0 +1,7 @@
+ALTER TABLE eventstore.events2 ALTER COLUMN event_type SET NOT NULL;
+ALTER TABLE eventstore.events2 ALTER COLUMN revision SET NOT NULL;
+ALTER TABLE eventstore.events2 ALTER COLUMN created_at SET NOT NULL;
+ALTER TABLE eventstore.events2 ALTER COLUMN creator SET NOT NULL;
+ALTER TABLE eventstore.events2 ALTER COLUMN "owner" SET NOT NULL;
+ALTER TABLE eventstore.events2 ALTER COLUMN "position" SET NOT NULL;
+ALTER TABLE eventstore.events2 ALTER COLUMN in_tx_order SET NOT NULL;
\ No newline at end of file
diff --git a/cmd/setup/14/cockroach/04_indexes.sql b/cmd/setup/14/cockroach/04_indexes.sql
new file mode 100644
index 0000000000..a442653606
--- /dev/null
+++ b/cmd/setup/14/cockroach/04_indexes.sql
@@ -0,0 +1,3 @@
+CREATE INDEX IF NOT EXISTS es_active_instances ON eventstore.events2 (created_at DESC) STORING ("position");
+CREATE INDEX IF NOT EXISTS es_wm ON eventstore.events2 (aggregate_id, instance_id, aggregate_type, event_type);
+CREATE INDEX IF NOT EXISTS es_projection ON eventstore.events2 (instance_id, aggregate_type, event_type, "position");
\ No newline at end of file
diff --git a/cmd/setup/14/postgres/01_disable_inserts.sql b/cmd/setup/14/postgres/01_disable_inserts.sql
new file mode 100644
index 0000000000..0f3c277eba
--- /dev/null
+++ b/cmd/setup/14/postgres/01_disable_inserts.sql
@@ -0,0 +1 @@
+ALTER TABLE eventstore.events RENAME TO events_old;
\ No newline at end of file
diff --git a/cmd/setup/14/postgres/02_create_and_fill_events2.sql b/cmd/setup/14/postgres/02_create_and_fill_events2.sql
new file mode 100644
index 0000000000..c33b1f560f
--- /dev/null
+++ b/cmd/setup/14/postgres/02_create_and_fill_events2.sql
@@ -0,0 +1,31 @@
+CREATE TABLE eventstore.events2 (
+ instance_id,
+ aggregate_type,
+ aggregate_id,
+
+ event_type,
+ "sequence",
+ revision,
+ created_at,
+ payload,
+ creator,
+ "owner",
+
+ "position",
+ in_tx_order
+) AS SELECT
+ instance_id,
+ aggregate_type,
+ aggregate_id,
+
+ event_type,
+ event_sequence,
+ substr(aggregate_version, 2)::SMALLINT,
+ creation_date,
+ event_data,
+ editor_user,
+ resource_owner,
+
+ EXTRACT(EPOCH FROM creation_date),
+ event_sequence
+FROM eventstore.events_old;
\ No newline at end of file
diff --git a/cmd/setup/14/postgres/03_events2_pk.sql b/cmd/setup/14/postgres/03_events2_pk.sql
new file mode 100644
index 0000000000..469aae854e
--- /dev/null
+++ b/cmd/setup/14/postgres/03_events2_pk.sql
@@ -0,0 +1,4 @@
+BEGIN;
+ALTER TABLE eventstore.events2 DROP CONSTRAINT IF EXISTS events2_pkey;
+ALTER TABLE eventstore.events2 ADD PRIMARY KEY (instance_id, aggregate_type, aggregate_id, "sequence");
+COMMIT;
\ No newline at end of file
diff --git a/cmd/setup/14/postgres/04_constraints.sql b/cmd/setup/14/postgres/04_constraints.sql
new file mode 100644
index 0000000000..6cccf6b496
--- /dev/null
+++ b/cmd/setup/14/postgres/04_constraints.sql
@@ -0,0 +1,7 @@
+ALTER TABLE eventstore.events2 ALTER COLUMN event_type SET NOT NULL,
+ ALTER COLUMN revision SET NOT NULL,
+ ALTER COLUMN created_at SET NOT NULL,
+ ALTER COLUMN creator SET NOT NULL,
+ ALTER COLUMN "owner" SET NOT NULL,
+ ALTER COLUMN "position" SET NOT NULL,
+ ALTER COLUMN in_tx_order SET NOT NULL;
\ No newline at end of file
diff --git a/cmd/setup/14/postgres/05_indexes.sql b/cmd/setup/14/postgres/05_indexes.sql
new file mode 100644
index 0000000000..36c9bc38a7
--- /dev/null
+++ b/cmd/setup/14/postgres/05_indexes.sql
@@ -0,0 +1,3 @@
+CREATE INDEX IF NOT EXISTS es_active_instances ON eventstore.events2 (created_at DESC, instance_id);
+CREATE INDEX IF NOT EXISTS es_wm ON eventstore.events2 (aggregate_id, instance_id, aggregate_type, event_type);
+CREATE INDEX IF NOT EXISTS es_projection ON eventstore.events2 (instance_id, aggregate_type, event_type, "position");
\ No newline at end of file
diff --git a/cmd/setup/15.go b/cmd/setup/15.go
new file mode 100644
index 0000000000..174821e0b7
--- /dev/null
+++ b/cmd/setup/15.go
@@ -0,0 +1,45 @@
+package setup
+
+import (
+ "context"
+ "embed"
+
+ "github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/database"
+)
+
+var (
+ //go:embed 15/cockroach/*.sql
+ //go:embed 15/postgres/*.sql
+ currentProjectionState embed.FS
+)
+
+type CurrentProjectionState struct {
+ dbClient *database.DB
+}
+
+func (mig *CurrentProjectionState) Execute(ctx context.Context) error {
+ migrations, err := currentProjectionState.ReadDir("15/" + mig.dbClient.Type())
+ if err != nil {
+ return err
+ }
+ for _, migration := range migrations {
+ stmt, err := readStmt(currentProjectionState, "15", mig.dbClient.Type(), migration.Name())
+ if err != nil {
+ return err
+ }
+
+ logging.WithFields("file", migration.Name(), "migration", mig.String()).Info("execute statement")
+
+ _, err = mig.dbClient.ExecContext(ctx, stmt)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (mig *CurrentProjectionState) String() string {
+ return "15_current_projection_state"
+}
diff --git a/cmd/setup/15/cockroach/01_new_failed_events.sql b/cmd/setup/15/cockroach/01_new_failed_events.sql
new file mode 100644
index 0000000000..5fa39c08a5
--- /dev/null
+++ b/cmd/setup/15/cockroach/01_new_failed_events.sql
@@ -0,0 +1,16 @@
+CREATE TABLE IF NOT EXISTS projections.failed_events2 (
+ projection_name TEXT NOT NULL
+ , instance_id TEXT NOT NULL
+
+ , aggregate_type TEXT NOT NULL
+ , aggregate_id TEXT NOT NULL
+ , event_creation_date TIMESTAMPTZ NOT NULL
+ , failed_sequence INT8 NOT NULL
+
+ , failure_count INT2 NULL DEFAULT 0
+ , error TEXT
+ , last_failed TIMESTAMPTZ
+
+ , PRIMARY KEY (projection_name, instance_id, aggregate_type, aggregate_id, failed_sequence)
+);
+CREATE INDEX IF NOT EXISTS fe2_instance_id_idx on projections.failed_events2 (instance_id);
\ No newline at end of file
diff --git a/cmd/setup/15/cockroach/02_fe_from_projections.sql b/cmd/setup/15/cockroach/02_fe_from_projections.sql
new file mode 100644
index 0000000000..8bf7a4b8d4
--- /dev/null
+++ b/cmd/setup/15/cockroach/02_fe_from_projections.sql
@@ -0,0 +1,26 @@
+INSERT INTO projections.failed_events2 (
+ projection_name
+ , instance_id
+ , aggregate_type
+ , aggregate_id
+ , event_creation_date
+ , failed_sequence
+ , failure_count
+ , error
+ , last_failed
+) SELECT
+ fe.projection_name
+ , fe.instance_id
+ , e.aggregate_type
+ , e.aggregate_id
+ , e.created_at
+ , e.sequence
+ , fe.failure_count
+ , fe.error
+ , fe.last_failed
+FROM
+ projections.failed_events fe
+JOIN eventstore.events2 e ON
+ e.instance_id = fe.instance_id
+ AND e.sequence = fe.failed_sequence
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/cockroach/03_fe_from_adminapi.sql b/cmd/setup/15/cockroach/03_fe_from_adminapi.sql
new file mode 100644
index 0000000000..1616662fed
--- /dev/null
+++ b/cmd/setup/15/cockroach/03_fe_from_adminapi.sql
@@ -0,0 +1,26 @@
+INSERT INTO projections.failed_events2 (
+ projection_name
+ , instance_id
+ , aggregate_type
+ , aggregate_id
+ , event_creation_date
+ , failed_sequence
+ , failure_count
+ , error
+ , last_failed
+) SELECT
+ fe.view_name
+ , fe.instance_id
+ , e.aggregate_type
+ , e.aggregate_id
+ , e.created_at
+ , e.sequence
+ , fe.failure_count
+ , fe.err_msg
+ , fe.last_failed
+FROM
+ adminapi.failed_events fe
+JOIN eventstore.events2 e ON
+ e.instance_id = fe.instance_id
+ AND e.sequence = fe.failed_sequence
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/cockroach/04_fe_from_auth.sql b/cmd/setup/15/cockroach/04_fe_from_auth.sql
new file mode 100644
index 0000000000..a249293e24
--- /dev/null
+++ b/cmd/setup/15/cockroach/04_fe_from_auth.sql
@@ -0,0 +1,26 @@
+INSERT INTO projections.failed_events2 (
+ projection_name
+ , instance_id
+ , aggregate_type
+ , aggregate_id
+ , event_creation_date
+ , failed_sequence
+ , failure_count
+ , error
+ , last_failed
+) SELECT
+ fe.view_name
+ , fe.instance_id
+ , e.aggregate_type
+ , e.aggregate_id
+ , e.created_at
+ , e.sequence
+ , fe.failure_count
+ , fe.err_msg
+ , fe.last_failed
+FROM
+ auth.failed_events fe
+JOIN eventstore.events2 e ON
+ e.instance_id = fe.instance_id
+ AND e.sequence = fe.failed_sequence
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/cockroach/05_current_states.sql b/cmd/setup/15/cockroach/05_current_states.sql
new file mode 100644
index 0000000000..bc2f5ed771
--- /dev/null
+++ b/cmd/setup/15/cockroach/05_current_states.sql
@@ -0,0 +1,15 @@
+CREATE TABLE IF NOT EXISTS projections.current_states (
+ projection_name TEXT NOT NULL
+ , instance_id TEXT NOT NULL
+
+ , last_updated TIMESTAMPTZ
+
+ , aggregate_id TEXT
+ , aggregate_type TEXT
+ , "sequence" INT8
+ , event_date TIMESTAMPTZ
+ , "position" DECIMAL
+
+ , PRIMARY KEY (projection_name, instance_id)
+);
+CREATE INDEX IF NOT EXISTS cs_instance_id_idx ON projections.current_states (instance_id);
\ No newline at end of file
diff --git a/cmd/setup/15/cockroach/06_cs_from_projections.sql b/cmd/setup/15/cockroach/06_cs_from_projections.sql
new file mode 100644
index 0000000000..579afb6d4c
--- /dev/null
+++ b/cmd/setup/15/cockroach/06_cs_from_projections.sql
@@ -0,0 +1,29 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , event_date
+ , "position"
+ , last_updated
+) (SELECT
+ cs.projection_name
+ , cs.instance_id
+ , e.created_at
+ , e.position
+ , cs.timestamp
+FROM
+ projections.current_sequences cs
+JOIN eventstore.events2 e ON
+ e.instance_id = cs.instance_id
+ AND e.aggregate_type = cs.aggregate_type
+ AND e.sequence = cs.current_sequence
+ AND cs.current_sequence = (
+ SELECT
+ MAX(cs2.current_sequence)
+ FROM
+ projections.current_sequences cs2
+ WHERE
+ cs.projection_name = cs2.projection_name
+ AND cs.instance_id = cs2.instance_id
+ )
+)
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/cockroach/07_cs_from_adminapi.sql b/cmd/setup/15/cockroach/07_cs_from_adminapi.sql
new file mode 100644
index 0000000000..c40d13a067
--- /dev/null
+++ b/cmd/setup/15/cockroach/07_cs_from_adminapi.sql
@@ -0,0 +1,28 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , event_date
+ , "position"
+ , last_updated
+) (SELECT
+ cs.view_name
+ , cs.instance_id
+ , e.created_at
+ , e.position
+ , cs.last_successful_spooler_run
+FROM
+ adminapi.current_sequences cs
+JOIN eventstore.events2 e ON
+ e.instance_id = cs.instance_id
+ AND e.sequence = cs.current_sequence
+ AND cs.current_sequence = (
+ SELECT
+ MAX(cs2.current_sequence)
+ FROM
+ adminapi.current_sequences cs2
+ WHERE
+ cs.view_name = cs2.view_name
+ AND cs.instance_id = cs2.instance_id
+ )
+)
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/cockroach/08_cs_from_auth.sql b/cmd/setup/15/cockroach/08_cs_from_auth.sql
new file mode 100644
index 0000000000..c8e7236107
--- /dev/null
+++ b/cmd/setup/15/cockroach/08_cs_from_auth.sql
@@ -0,0 +1,28 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , event_date
+ , "position"
+ , last_updated
+) (SELECT
+ cs.view_name
+ , cs.instance_id
+ , e.created_at
+ , e.position
+ , cs.last_successful_spooler_run
+FROM
+ auth.current_sequences cs
+JOIN eventstore.events2 e ON
+ e.instance_id = cs.instance_id
+ AND e.sequence = cs.current_sequence
+ AND cs.current_sequence = (
+ SELECT
+ MAX(cs2.current_sequence)
+ FROM
+ auth.current_sequences cs2
+ WHERE
+ cs.view_name = cs2.view_name
+ AND cs.instance_id = cs2.instance_id
+ )
+)
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/01_new_failed_events.sql b/cmd/setup/15/postgres/01_new_failed_events.sql
new file mode 100644
index 0000000000..5fa39c08a5
--- /dev/null
+++ b/cmd/setup/15/postgres/01_new_failed_events.sql
@@ -0,0 +1,16 @@
+CREATE TABLE IF NOT EXISTS projections.failed_events2 (
+ projection_name TEXT NOT NULL
+ , instance_id TEXT NOT NULL
+
+ , aggregate_type TEXT NOT NULL
+ , aggregate_id TEXT NOT NULL
+ , event_creation_date TIMESTAMPTZ NOT NULL
+ , failed_sequence INT8 NOT NULL
+
+ , failure_count INT2 NULL DEFAULT 0
+ , error TEXT
+ , last_failed TIMESTAMPTZ
+
+ , PRIMARY KEY (projection_name, instance_id, aggregate_type, aggregate_id, failed_sequence)
+);
+CREATE INDEX IF NOT EXISTS fe2_instance_id_idx on projections.failed_events2 (instance_id);
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/02_fe_from_projections.sql b/cmd/setup/15/postgres/02_fe_from_projections.sql
new file mode 100644
index 0000000000..e22cc974ac
--- /dev/null
+++ b/cmd/setup/15/postgres/02_fe_from_projections.sql
@@ -0,0 +1,26 @@
+INSERT INTO projections.failed_events2 (
+ projection_name
+ , instance_id
+ , aggregate_type
+ , aggregate_id
+ , event_creation_date
+ , failed_sequence
+ , failure_count
+ , error
+ , last_failed
+) SELECT
+ fe.projection_name
+ , fe.instance_id
+ , e.aggregate_type
+ , e.aggregate_id
+ , e.created_at
+ , e.sequence
+ , fe.failure_count
+ , fe.error
+ , fe.last_failed
+FROM
+ projections.failed_events fe
+JOIN eventstore.events2 e ON
+ e.instance_id = fe.instance_id
+ AND e.sequence = fe.failed_sequence
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/03_fe_from_adminapi.sql b/cmd/setup/15/postgres/03_fe_from_adminapi.sql
new file mode 100644
index 0000000000..1616662fed
--- /dev/null
+++ b/cmd/setup/15/postgres/03_fe_from_adminapi.sql
@@ -0,0 +1,26 @@
+INSERT INTO projections.failed_events2 (
+ projection_name
+ , instance_id
+ , aggregate_type
+ , aggregate_id
+ , event_creation_date
+ , failed_sequence
+ , failure_count
+ , error
+ , last_failed
+) SELECT
+ fe.view_name
+ , fe.instance_id
+ , e.aggregate_type
+ , e.aggregate_id
+ , e.created_at
+ , e.sequence
+ , fe.failure_count
+ , fe.err_msg
+ , fe.last_failed
+FROM
+ adminapi.failed_events fe
+JOIN eventstore.events2 e ON
+ e.instance_id = fe.instance_id
+ AND e.sequence = fe.failed_sequence
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/04_fe_from_auth.sql b/cmd/setup/15/postgres/04_fe_from_auth.sql
new file mode 100644
index 0000000000..a249293e24
--- /dev/null
+++ b/cmd/setup/15/postgres/04_fe_from_auth.sql
@@ -0,0 +1,26 @@
+INSERT INTO projections.failed_events2 (
+ projection_name
+ , instance_id
+ , aggregate_type
+ , aggregate_id
+ , event_creation_date
+ , failed_sequence
+ , failure_count
+ , error
+ , last_failed
+) SELECT
+ fe.view_name
+ , fe.instance_id
+ , e.aggregate_type
+ , e.aggregate_id
+ , e.created_at
+ , e.sequence
+ , fe.failure_count
+ , fe.err_msg
+ , fe.last_failed
+FROM
+ auth.failed_events fe
+JOIN eventstore.events2 e ON
+ e.instance_id = fe.instance_id
+ AND e.sequence = fe.failed_sequence
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/05_current_states.sql b/cmd/setup/15/postgres/05_current_states.sql
new file mode 100644
index 0000000000..bc2f5ed771
--- /dev/null
+++ b/cmd/setup/15/postgres/05_current_states.sql
@@ -0,0 +1,15 @@
+CREATE TABLE IF NOT EXISTS projections.current_states (
+ projection_name TEXT NOT NULL
+ , instance_id TEXT NOT NULL
+
+ , last_updated TIMESTAMPTZ
+
+ , aggregate_id TEXT
+ , aggregate_type TEXT
+ , "sequence" INT8
+ , event_date TIMESTAMPTZ
+ , "position" DECIMAL
+
+ , PRIMARY KEY (projection_name, instance_id)
+);
+CREATE INDEX IF NOT EXISTS cs_instance_id_idx ON projections.current_states (instance_id);
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/06_cs_from_projections.sql b/cmd/setup/15/postgres/06_cs_from_projections.sql
new file mode 100644
index 0000000000..2cd145c32e
--- /dev/null
+++ b/cmd/setup/15/postgres/06_cs_from_projections.sql
@@ -0,0 +1,28 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , event_date
+ , "position"
+ , last_updated
+) SELECT
+ cs.projection_name
+ , cs.instance_id
+ , e.created_at
+ , e.position
+ , cs.timestamp
+FROM
+ projections.current_sequences cs
+JOIN eventstore.events2 e ON
+ e.instance_id = cs.instance_id
+ AND e.aggregate_type = cs.aggregate_type
+ AND e.sequence = cs.current_sequence
+ AND cs.current_sequence = (
+ SELECT
+ MAX(cs2.current_sequence)
+ FROM
+ projections.current_sequences cs2
+ WHERE
+ cs.projection_name = cs2.projection_name
+ AND cs.instance_id = cs2.instance_id
+ )
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/07_cs_from_adminapi.sql b/cmd/setup/15/postgres/07_cs_from_adminapi.sql
new file mode 100644
index 0000000000..791d0fde9b
--- /dev/null
+++ b/cmd/setup/15/postgres/07_cs_from_adminapi.sql
@@ -0,0 +1,27 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , event_date
+ , "position"
+ , last_updated
+) SELECT
+ cs.view_name
+ , cs.instance_id
+ , e.created_at
+ , e.position
+ , cs.last_successful_spooler_run
+FROM
+ adminapi.current_sequences cs
+JOIN eventstore.events2 e ON
+ e.instance_id = cs.instance_id
+ AND e.sequence = cs.current_sequence
+ AND cs.current_sequence = (
+ SELECT
+ MAX(cs2.current_sequence)
+ FROM
+ adminapi.current_sequences cs2
+ WHERE
+ cs.view_name = cs2.view_name
+ AND cs.instance_id = cs2.instance_id
+ )
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/15/postgres/08_cs_from_auth.sql b/cmd/setup/15/postgres/08_cs_from_auth.sql
new file mode 100644
index 0000000000..654c7b0bcc
--- /dev/null
+++ b/cmd/setup/15/postgres/08_cs_from_auth.sql
@@ -0,0 +1,27 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , event_date
+ , "position"
+ , last_updated
+) SELECT
+ cs.view_name
+ , cs.instance_id
+ , e.created_at
+ , e.position
+ , cs.last_successful_spooler_run
+FROM
+ auth.current_sequences cs
+JOIN eventstore.events2 e ON
+ e.instance_id = cs.instance_id
+ AND e.sequence = cs.current_sequence
+ AND cs.current_sequence = (
+ SELECT
+ MAX(cs2.current_sequence)
+ FROM
+ auth.current_sequences cs2
+ WHERE
+ cs.view_name = cs2.view_name
+ AND cs.instance_id = cs2.instance_id
+ )
+ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/cmd/setup/cleanup.go b/cmd/setup/cleanup.go
index 7139b67d35..8da873b40e 100644
--- a/cmd/setup/cleanup.go
+++ b/cmd/setup/cleanup.go
@@ -9,6 +9,8 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
+ old_es "github.com/zitadel/zitadel/internal/eventstore/repository/sql"
+ new_es "github.com/zitadel/zitadel/internal/eventstore/v3"
"github.com/zitadel/zitadel/internal/migration"
)
@@ -29,11 +31,14 @@ func Cleanup(config *Config) {
logging.Info("cleanup started")
- dbClient, err := database.Connect(config.Database, false)
+ zitadelDBClient, err := database.Connect(config.Database, false, false)
+ logging.OnError(err).Fatal("unable to connect to database")
+ esPusherDBClient, err := database.Connect(config.Database, false, true)
logging.OnError(err).Fatal("unable to connect to database")
- es, err := eventstore.Start(&eventstore.Config{Client: dbClient})
- logging.OnError(err).Fatal("unable to start eventstore")
+ config.Eventstore.Pusher = new_es.NewEventstore(esPusherDBClient)
+ config.Eventstore.Querier = old_es.NewCRDB(zitadelDBClient)
+ es := eventstore.NewEventstore(config.Eventstore)
migration.RegisterMappers(es)
step, err := migration.LatestStep(ctx, es)
diff --git a/cmd/setup/config.go b/cmd/setup/config.go
index 068f524b92..4ff7c0232b 100644
--- a/cmd/setup/config.go
+++ b/cmd/setup/config.go
@@ -15,6 +15,7 @@ import (
"github.com/zitadel/zitadel/internal/config/systemdefaults"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/query/projection"
)
@@ -31,6 +32,7 @@ type Config struct {
DefaultInstance command.InstanceSetup
Machine *id.Config
Projections projection.Config
+ Eventstore *eventstore.Config
}
func MustNewConfig(v *viper.Viper) *Config {
@@ -60,16 +62,15 @@ type Steps struct {
s1ProjectionTable *ProjectionTable
s2AssetsTable *AssetTable
FirstInstance *FirstInstance
- s4EventstoreIndexes *EventstoreIndexesNew
s5LastFailed *LastFailed
s6OwnerRemoveColumns *OwnerRemoveColumns
s7LogstoreTables *LogstoreTables
s8AuthTokens *AuthTokenIndexes
- s9EventstoreIndexes2 *EventstoreIndexesNew
CorrectCreationDate *CorrectCreationDate
- AddEventCreatedAt *AddEventCreatedAt
s12AddOTPColumns *AddOTPColumns
s13FixQuotaProjection *FixQuotaConstraints
+ s14NewEventsTable *NewEventsTable
+ s15CurrentStates *CurrentProjectionState
}
type encryptionKeyConfig struct {
diff --git a/cmd/setup/eventstore_index.go b/cmd/setup/eventstore_index.go
deleted file mode 100644
index 6165d75d2a..0000000000
--- a/cmd/setup/eventstore_index.go
+++ /dev/null
@@ -1,29 +0,0 @@
-package setup
-
-import (
- "context"
- "embed"
-
- "github.com/zitadel/zitadel/internal/database"
-)
-
-type EventstoreIndexesNew struct {
- dbClient *database.DB
- name string
- step string
- fileName string
- stmts embed.FS
-}
-
-func (mig *EventstoreIndexesNew) Execute(ctx context.Context) error {
- stmt, err := readStmt(mig.stmts, mig.step, mig.dbClient.Type(), mig.fileName)
- if err != nil {
- return err
- }
- _, err = mig.dbClient.ExecContext(ctx, stmt)
- return err
-}
-
-func (mig *EventstoreIndexesNew) String() string {
- return mig.name
-}
diff --git a/cmd/setup/setup.go b/cmd/setup/setup.go
index 1efe703986..8ef9373f7b 100644
--- a/cmd/setup/setup.go
+++ b/cmd/setup/setup.go
@@ -14,6 +14,8 @@ import (
"github.com/zitadel/zitadel/cmd/tls"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
+ old_es "github.com/zitadel/zitadel/internal/eventstore/repository/sql"
+ new_es "github.com/zitadel/zitadel/internal/eventstore/v3"
"github.com/zitadel/zitadel/internal/migration"
"github.com/zitadel/zitadel/internal/query/projection"
)
@@ -62,22 +64,26 @@ func Setup(config *Config, steps *Steps, masterKey string) {
ctx := context.Background()
logging.Info("setup started")
- dbClient, err := database.Connect(config.Database, false)
+ zitadelDBClient, err := database.Connect(config.Database, false, false)
+ logging.OnError(err).Fatal("unable to connect to database")
+ esPusherDBClient, err := database.Connect(config.Database, false, true)
logging.OnError(err).Fatal("unable to connect to database")
- eventstoreClient, err := eventstore.Start(&eventstore.Config{Client: dbClient})
+ config.Eventstore.Querier = old_es.NewCRDB(zitadelDBClient)
+ config.Eventstore.Pusher = new_es.NewEventstore(esPusherDBClient)
+ eventstoreClient := eventstore.NewEventstore(config.Eventstore)
logging.OnError(err).Fatal("unable to start eventstore")
migration.RegisterMappers(eventstoreClient)
- steps.s1ProjectionTable = &ProjectionTable{dbClient: dbClient.DB}
- steps.s2AssetsTable = &AssetTable{dbClient: dbClient.DB}
+ steps.s1ProjectionTable = &ProjectionTable{dbClient: zitadelDBClient.DB}
+ steps.s2AssetsTable = &AssetTable{dbClient: zitadelDBClient.DB}
steps.FirstInstance.instanceSetup = config.DefaultInstance
steps.FirstInstance.userEncryptionKey = config.EncryptionKeys.User
steps.FirstInstance.smtpEncryptionKey = config.EncryptionKeys.SMTP
steps.FirstInstance.oidcEncryptionKey = config.EncryptionKeys.OIDC
steps.FirstInstance.masterKey = masterKey
- steps.FirstInstance.db = dbClient
+ steps.FirstInstance.db = zitadelDBClient
steps.FirstInstance.es = eventstoreClient
steps.FirstInstance.defaults = config.SystemDefaults
steps.FirstInstance.zitadelRoles = config.InternalAuthZ.RolePermissionMappings
@@ -85,19 +91,17 @@ func Setup(config *Config, steps *Steps, masterKey string) {
steps.FirstInstance.externalSecure = config.ExternalSecure
steps.FirstInstance.externalPort = config.ExternalPort
- steps.s4EventstoreIndexes = New04(dbClient)
- steps.s5LastFailed = &LastFailed{dbClient: dbClient.DB}
- steps.s6OwnerRemoveColumns = &OwnerRemoveColumns{dbClient: dbClient.DB}
- steps.s7LogstoreTables = &LogstoreTables{dbClient: dbClient.DB, username: config.Database.Username(), dbType: config.Database.Type()}
- steps.s8AuthTokens = &AuthTokenIndexes{dbClient: dbClient}
- steps.s9EventstoreIndexes2 = New09(dbClient)
- steps.CorrectCreationDate.dbClient = dbClient
- steps.AddEventCreatedAt.dbClient = dbClient
- steps.AddEventCreatedAt.step10 = steps.CorrectCreationDate
- steps.s12AddOTPColumns = &AddOTPColumns{dbClient: dbClient}
- steps.s13FixQuotaProjection = &FixQuotaConstraints{dbClient: dbClient}
+ steps.s5LastFailed = &LastFailed{dbClient: zitadelDBClient.DB}
+ steps.s6OwnerRemoveColumns = &OwnerRemoveColumns{dbClient: zitadelDBClient.DB}
+ steps.s7LogstoreTables = &LogstoreTables{dbClient: zitadelDBClient.DB, username: config.Database.Username(), dbType: config.Database.Type()}
+ steps.s8AuthTokens = &AuthTokenIndexes{dbClient: zitadelDBClient}
+ steps.CorrectCreationDate.dbClient = esPusherDBClient
+ steps.s12AddOTPColumns = &AddOTPColumns{dbClient: zitadelDBClient}
+ steps.s13FixQuotaProjection = &FixQuotaConstraints{dbClient: zitadelDBClient}
+ steps.s14NewEventsTable = &NewEventsTable{dbClient: esPusherDBClient}
+ steps.s15CurrentStates = &CurrentProjectionState{dbClient: zitadelDBClient}
- err = projection.Create(ctx, dbClient, eventstoreClient, config.Projections, nil, nil)
+ err = projection.Create(ctx, zitadelDBClient, eventstoreClient, config.Projections, nil, nil, nil)
logging.OnError(err).Fatal("unable to start projections")
repeatableSteps := []migration.RepeatableMigration{
@@ -114,32 +118,28 @@ func Setup(config *Config, steps *Steps, masterKey string) {
},
}
+ err = migration.Migrate(ctx, eventstoreClient, steps.s14NewEventsTable)
+ logging.WithFields("name", steps.s14NewEventsTable.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s1ProjectionTable)
- logging.OnError(err).Fatal("unable to migrate step 1")
+ logging.WithFields("name", steps.s1ProjectionTable.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s2AssetsTable)
- logging.OnError(err).Fatal("unable to migrate step 2")
+ logging.WithFields("name", steps.s2AssetsTable.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.FirstInstance)
- logging.OnError(err).Fatal("unable to migrate step 3")
- err = migration.Migrate(ctx, eventstoreClient, steps.s4EventstoreIndexes)
- logging.OnError(err).Fatal("unable to migrate step 4")
+ logging.WithFields("name", steps.FirstInstance.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s5LastFailed)
- logging.OnError(err).Fatal("unable to migrate step 5")
+ logging.WithFields("name", steps.s5LastFailed.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s6OwnerRemoveColumns)
- logging.OnError(err).Fatal("unable to migrate step 6")
+ logging.WithFields("name", steps.s6OwnerRemoveColumns.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s7LogstoreTables)
- logging.OnError(err).Fatal("unable to migrate step 7")
+ logging.WithFields("name", steps.s7LogstoreTables.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s8AuthTokens)
- logging.OnError(err).Fatal("unable to migrate step 8")
- err = migration.Migrate(ctx, eventstoreClient, steps.s9EventstoreIndexes2)
- logging.OnError(err).Fatal("unable to migrate step 9")
- err = migration.Migrate(ctx, eventstoreClient, steps.CorrectCreationDate)
- logging.OnError(err).Fatal("unable to migrate step 10")
- err = migration.Migrate(ctx, eventstoreClient, steps.AddEventCreatedAt)
- logging.OnError(err).Fatal("unable to migrate step 11")
+ logging.WithFields("name", steps.s8AuthTokens.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s12AddOTPColumns)
- logging.OnError(err).Fatal("unable to migrate step 12")
+ logging.WithFields("name", steps.s12AddOTPColumns.String()).OnError(err).Fatal("migration failed")
err = migration.Migrate(ctx, eventstoreClient, steps.s13FixQuotaProjection)
- logging.OnError(err).Fatal("unable to migrate step 13")
+ logging.WithFields("name", steps.s13FixQuotaProjection.String()).OnError(err).Fatal("migration failed")
+ err = migration.Migrate(ctx, eventstoreClient, steps.s15CurrentStates)
+ logging.WithFields("name", steps.s15CurrentStates.String()).OnError(err).Fatal("migration failed")
for _, repeatableStep := range repeatableSteps {
err = migration.Migrate(ctx, eventstoreClient, repeatableStep)
diff --git a/cmd/start/start.go b/cmd/start/start.go
index 6a017af0db..dfc759e3af 100644
--- a/cmd/start/start.go
+++ b/cmd/start/start.go
@@ -60,6 +60,8 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
+ old_es "github.com/zitadel/zitadel/internal/eventstore/repository/sql"
+ new_es "github.com/zitadel/zitadel/internal/eventstore/v3"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/logstore"
"github.com/zitadel/zitadel/internal/logstore/emitters/access"
@@ -121,12 +123,16 @@ func startZitadel(config *Config, masterKey string, server chan<- *Server) error
ctx := context.Background()
- dbClient, err := database.Connect(config.Database, false)
+ zitadelDBClient, err := database.Connect(config.Database, false, false)
+ if err != nil {
+ return fmt.Errorf("cannot start client for projection: %w", err)
+ }
+ esPusherDBClient, err := database.Connect(config.Database, false, true)
if err != nil {
return fmt.Errorf("cannot start client for projection: %w", err)
}
- keyStorage, err := cryptoDB.NewKeyStorage(dbClient, masterKey)
+ keyStorage, err := cryptoDB.NewKeyStorage(zitadelDBClient, masterKey)
if err != nil {
return fmt.Errorf("cannot start key storage: %w", err)
}
@@ -135,18 +141,16 @@ func startZitadel(config *Config, masterKey string, server chan<- *Server) error
return err
}
- config.Eventstore.Client = dbClient
- eventstoreClient, err := eventstore.Start(config.Eventstore)
- if err != nil {
- return fmt.Errorf("cannot start eventstore for queries: %w", err)
- }
+ config.Eventstore.Pusher = new_es.NewEventstore(esPusherDBClient)
+ config.Eventstore.Querier = old_es.NewCRDB(zitadelDBClient)
+ eventstoreClient := eventstore.NewEventstore(config.Eventstore)
sessionTokenVerifier := internal_authz.SessionTokenVerifier(keys.OIDC)
queries, err := query.StartQueries(
ctx,
eventstoreClient,
- dbClient,
+ zitadelDBClient,
config.Projections,
config.SystemDefaults,
keys.IDPConfig,
@@ -160,12 +164,13 @@ func startZitadel(config *Config, masterKey string, server chan<- *Server) error
return internal_authz.CheckPermission(ctx, &authz_es.UserMembershipRepo{Queries: q}, config.InternalAuthZ.RolePermissionMappings, permission, orgID, resourceID)
}
},
+ config.SystemAPIUsers,
)
if err != nil {
return fmt.Errorf("cannot start queries: %w", err)
}
- authZRepo, err := authz.Start(queries, dbClient, keys.OIDC, config.ExternalSecure, config.Eventstore.AllowOrderByCreationDate)
+ authZRepo, err := authz.Start(queries, eventstoreClient, zitadelDBClient, keys.OIDC, config.ExternalSecure)
if err != nil {
return fmt.Errorf("error starting authz repo: %w", err)
}
@@ -173,7 +178,7 @@ func startZitadel(config *Config, masterKey string, server chan<- *Server) error
return internal_authz.CheckPermission(ctx, authZRepo, config.InternalAuthZ.RolePermissionMappings, permission, orgID, resourceID)
}
- storage, err := config.AssetStorage.NewStorage(dbClient.DB)
+ storage, err := config.AssetStorage.NewStorage(zitadelDBClient.DB)
if err != nil {
return fmt.Errorf("cannot start asset storage client: %w", err)
}
@@ -215,7 +220,7 @@ func startZitadel(config *Config, masterKey string, server chan<- *Server) error
if err != nil {
return err
}
- actionsExecutionDBEmitter, err := logstore.NewEmitter[*record.ExecutionLog](ctx, clock, config.Quotas.Execution, execution.NewDatabaseLogStorage(dbClient, commands, queries))
+ actionsExecutionDBEmitter, err := logstore.NewEmitter[*record.ExecutionLog](ctx, clock, config.Quotas.Execution, execution.NewDatabaseLogStorage(zitadelDBClient, commands, queries))
if err != nil {
return err
}
@@ -254,7 +259,7 @@ func startZitadel(config *Config, masterKey string, server chan<- *Server) error
commands,
queries,
eventstoreClient,
- dbClient,
+ zitadelDBClient,
config,
storage,
authZRepo,
@@ -271,7 +276,7 @@ func startZitadel(config *Config, masterKey string, server chan<- *Server) error
if server != nil {
server <- &Server{
Config: config,
- DB: dbClient,
+ DB: zitadelDBClient,
KeyStorage: keyStorage,
Keys: keys,
Eventstore: eventstoreClient,
@@ -338,18 +343,25 @@ func startAPIs(
if err != nil {
return fmt.Errorf("error creating api %w", err)
}
- authRepo, err := auth_es.Start(ctx, config.Auth, config.SystemDefaults, commands, queries, dbClient, eventstore, keys.OIDC, keys.User, config.Eventstore.AllowOrderByCreationDate)
+
+ config.Auth.Spooler.Client = dbClient
+ config.Auth.Spooler.Eventstore = eventstore
+ authRepo, err := auth_es.Start(ctx, config.Auth, config.SystemDefaults, commands, queries, dbClient, eventstore, keys.OIDC, keys.User)
if err != nil {
return fmt.Errorf("error starting auth repo: %w", err)
}
- adminRepo, err := admin_es.Start(ctx, config.Admin, store, dbClient, eventstore, config.Eventstore.AllowOrderByCreationDate)
+
+ config.Admin.Spooler.Client = dbClient
+ config.Admin.Spooler.Eventstore = eventstore
+ err = admin_es.Start(ctx, config.Admin, store, dbClient)
if err != nil {
return fmt.Errorf("error starting admin repo: %w", err)
}
- if err := apis.RegisterServer(ctx, system.CreateServer(commands, queries, adminRepo, config.Database.DatabaseName(), config.DefaultInstance, config.ExternalDomain)); err != nil {
+
+ if err := apis.RegisterServer(ctx, system.CreateServer(commands, queries, config.Database.DatabaseName(), config.DefaultInstance, config.ExternalDomain)); err != nil {
return err
}
- if err := apis.RegisterServer(ctx, admin.CreateServer(config.Database.DatabaseName(), commands, queries, config.SystemDefaults, adminRepo, config.ExternalSecure, keys.User, config.AuditLogRetention)); err != nil {
+ if err := apis.RegisterServer(ctx, admin.CreateServer(config.Database.DatabaseName(), commands, queries, config.SystemDefaults, config.ExternalSecure, keys.User, config.AuditLogRetention)); err != nil {
return err
}
if err := apis.RegisterServer(ctx, management.CreateServer(commands, queries, config.SystemDefaults, keys.User, config.ExternalSecure, config.AuditLogRetention)); err != nil {
diff --git a/console/src/app/services/admin.service.ts b/console/src/app/services/admin.service.ts
index 7929e62bc7..0b173bdaa8 100644
--- a/console/src/app/services/admin.service.ts
+++ b/console/src/app/services/admin.service.ts
@@ -306,6 +306,7 @@ export interface OnboardingActions {
iconClasses?: string;
darkcolor: string;
lightcolor: string;
+ aggregateType: string;
}
type OnboardingEvent = {
@@ -330,7 +331,12 @@ export class AdminService {
tap(() => this.onboardingLoading.next(true)),
switchMap((actions) => {
const searchForTypes = actions.map((oe) => oe.oneof).flat();
- const eventsReq = new ListEventsRequest().setAsc(true).setEventTypesList(searchForTypes).setAsc(false);
+ const aggregateTypes = actions.map((oe) => oe.aggregateType);
+ const eventsReq = new ListEventsRequest()
+ .setAsc(true)
+ .setEventTypesList(searchForTypes)
+ .setAggregateTypesList(aggregateTypes)
+ .setAsc(false);
return from(this.listEvents(eventsReq)).pipe(
map((events) => {
const el = events.toObject().eventsList.filter((e) => e.editor?.service !== 'System-API' && e.editor?.userId);
diff --git a/console/src/app/utils/onboarding.ts b/console/src/app/utils/onboarding.ts
index 97f2de8c52..f93c11db1b 100644
--- a/console/src/app/utils/onboarding.ts
+++ b/console/src/app/utils/onboarding.ts
@@ -28,6 +28,7 @@ export const ONBOARDING_EVENTS: OnboardingActions[] = [
iconClasses: 'las la-database',
darkcolor: greendark,
lightcolor: greenlight,
+ aggregateType: 'project',
},
{
order: 1,
@@ -37,6 +38,7 @@ export const ONBOARDING_EVENTS: OnboardingActions[] = [
iconClasses: 'lab la-openid',
darkcolor: purpledark,
lightcolor: purplelight,
+ aggregateType: 'project',
},
{
order: 2,
@@ -46,6 +48,7 @@ export const ONBOARDING_EVENTS: OnboardingActions[] = [
iconClasses: 'las la-user',
darkcolor: bluedark,
lightcolor: bluelight,
+ aggregateType: 'user',
},
{
order: 3,
@@ -55,6 +58,7 @@ export const ONBOARDING_EVENTS: OnboardingActions[] = [
iconClasses: 'las la-shield-alt',
darkcolor: reddark,
lightcolor: redlight,
+ aggregateType: 'user_grant',
},
{
order: 4,
@@ -65,6 +69,7 @@ export const ONBOARDING_EVENTS: OnboardingActions[] = [
iconClasses: 'las la-swatchbook',
darkcolor: pinkdark,
lightcolor: pinklight,
+ aggregateType: 'instance',
},
{
order: 5,
@@ -75,5 +80,6 @@ export const ONBOARDING_EVENTS: OnboardingActions[] = [
iconClasses: 'las la-envelope',
darkcolor: yellowdark,
lightcolor: yellowlight,
+ aggregateType: 'instance',
},
];
diff --git a/e2e/config/host.docker.internal/zitadel.yaml b/e2e/config/host.docker.internal/zitadel.yaml
index ff3ecc76e4..fdc55266c2 100644
--- a/e2e/config/host.docker.internal/zitadel.yaml
+++ b/e2e/config/host.docker.internal/zitadel.yaml
@@ -8,6 +8,9 @@ Database:
cockroach:
# This makes the e2e config reusable with an out-of-docker zitadel process and an /etc/hosts entry
Host: host.docker.internal
+ EventPushConnRatio: 0.2
+ MaxOpenConns: 40
+ MaxIdleConns: 20
TLS:
Enabled: false
diff --git a/e2e/config/localhost/docker-compose.yaml b/e2e/config/localhost/docker-compose.yaml
index 90421e1c11..5dc5578a67 100644
--- a/e2e/config/localhost/docker-compose.yaml
+++ b/e2e/config/localhost/docker-compose.yaml
@@ -32,7 +32,7 @@ services:
db:
restart: 'always'
- image: 'cockroachdb/cockroach:v22.2.2'
+ image: 'cockroachdb/cockroach:v22.2.10'
command: 'start-single-node --insecure --http-addr :9090'
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:9090/health?ready=1']
diff --git a/e2e/config/localhost/zitadel.yaml b/e2e/config/localhost/zitadel.yaml
index 1c560ddfde..cfafaa637f 100644
--- a/e2e/config/localhost/zitadel.yaml
+++ b/e2e/config/localhost/zitadel.yaml
@@ -8,6 +8,9 @@ Database:
cockroach:
# This makes the e2e config reusable with an out-of-docker zitadel process and an /etc/hosts entry
Host: host.docker.internal
+ EventPushConnRatio: 0.2
+ MaxOpenConns: 40
+ MaxIdleConns: 20
TLS:
Enabled: false
diff --git a/internal/actions/object/metadata.go b/internal/actions/object/metadata.go
index 25c4857bde..61311fe508 100644
--- a/internal/actions/object/metadata.go
+++ b/internal/actions/object/metadata.go
@@ -16,7 +16,7 @@ func UserMetadataListFromQuery(c *actions.FieldConfig, metadata *query.UserMetad
result := &userMetadataList{
Count: metadata.Count,
Sequence: metadata.Sequence,
- Timestamp: metadata.Timestamp,
+ Timestamp: metadata.LastRun,
Metadata: make([]*userMetadata, len(metadata.Metadata)),
}
diff --git a/internal/actions/object/user.go b/internal/actions/object/user.go
index 860185828d..cf403ac59c 100644
--- a/internal/actions/object/user.go
+++ b/internal/actions/object/user.go
@@ -143,7 +143,7 @@ type humanUser struct {
Sequence uint64
State domain.UserState
Username string
- LoginNames database.StringArray
+ LoginNames database.TextArray[string]
PreferredLoginName string
Human human
}
@@ -170,7 +170,7 @@ type machineUser struct {
Sequence uint64
State domain.UserState
Username string
- LoginNames database.StringArray
+ LoginNames database.TextArray[string]
PreferredLoginName string
Machine machine
}
diff --git a/internal/actions/object/user_grant.go b/internal/actions/object/user_grant.go
index 204a4d8342..73de8bd0a0 100644
--- a/internal/actions/object/user_grant.go
+++ b/internal/actions/object/user_grant.go
@@ -65,7 +65,7 @@ func UserGrantsFromQuery(c *actions.FieldConfig, userGrants *query.UserGrants) g
grantList := &userGrantList{
Count: userGrants.Count,
Sequence: userGrants.Sequence,
- Timestamp: userGrants.Timestamp,
+ Timestamp: userGrants.LastRun,
Grants: make([]*userGrant, len(userGrants.UserGrants)),
}
diff --git a/internal/admin/repository/administrator.go b/internal/admin/repository/administrator.go
deleted file mode 100644
index 87e02ee6d5..0000000000
--- a/internal/admin/repository/administrator.go
+++ /dev/null
@@ -1,14 +0,0 @@
-package repository
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/view/model"
-)
-
-type AdministratorRepository interface {
- GetFailedEvents(ctx context.Context, instanceID string) ([]*model.FailedEvent, error)
- RemoveFailedEvent(context.Context, *model.FailedEvent) error
- GetViews(instanceID string) ([]*model.View, error)
- ClearView(ctx context.Context, db, viewName string) error
-}
diff --git a/internal/admin/repository/eventsourcing/eventstore/administrator.go b/internal/admin/repository/eventsourcing/eventstore/administrator.go
deleted file mode 100644
index 0272a7d3c8..0000000000
--- a/internal/admin/repository/eventsourcing/eventstore/administrator.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package eventstore
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/view"
- view_model "github.com/zitadel/zitadel/internal/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-var dbList = []string{"auth", "adminapi"}
-
-type AdministratorRepo struct {
- View *view.View
-}
-
-func (repo *AdministratorRepo) GetFailedEvents(ctx context.Context, instanceID string) ([]*view_model.FailedEvent, error) {
- allFailedEvents := make([]*view_model.FailedEvent, 0)
- for _, db := range dbList {
- failedEvents, err := repo.View.AllFailedEvents(db, instanceID)
- if err != nil {
- return nil, err
- }
- for _, failedEvent := range failedEvents {
- allFailedEvents = append(allFailedEvents, repository.FailedEventToModel(failedEvent))
- }
- }
- return allFailedEvents, nil
-}
-
-func (repo *AdministratorRepo) RemoveFailedEvent(ctx context.Context, failedEvent *view_model.FailedEvent) error {
- return repo.View.RemoveFailedEvent(failedEvent.Database, repository.FailedEventFromModel(failedEvent))
-}
-
-func (repo *AdministratorRepo) GetViews(instanceID string) ([]*view_model.View, error) {
- views := make([]*view_model.View, 0)
- for _, db := range dbList {
- sequences, err := repo.View.AllCurrentSequences(db, instanceID)
- if err != nil {
- return nil, err
- }
- for _, sequence := range sequences {
- views = append(views, repository.CurrentSequenceToModel(sequence))
- }
- }
- return views, nil
-}
-
-func (repo *AdministratorRepo) ClearView(ctx context.Context, database, view string) error {
- return repo.View.ClearView(database, view)
-}
diff --git a/internal/admin/repository/eventsourcing/handler/handler.go b/internal/admin/repository/eventsourcing/handler/handler.go
index e95e0232e3..a1ca9cb436 100644
--- a/internal/admin/repository/eventsourcing/handler/handler.go
+++ b/internal/admin/repository/eventsourcing/handler/handler.go
@@ -5,56 +5,55 @@ import (
"time"
"github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/view"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
+ "github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
+ handler2 "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/static"
)
-type Configs map[string]*Config
-
type Config struct {
+ Client *database.DB
+ Eventstore *eventstore.Eventstore
+
+ BulkLimit uint64
+ FailureCountUntilSkip uint64
+ HandleActiveInstances time.Duration
+ TransactionDuration time.Duration
+ Handlers map[string]*ConfigOverwrites
+}
+
+type ConfigOverwrites struct {
MinimumCycleDuration time.Duration
}
-type handler struct {
- view *view.View
- bulkLimit uint64
- cycleDuration time.Duration
- errorCountUntilSkip uint64
-
- es v1.Eventstore
-}
-
-func (h *handler) Eventstore() v1.Eventstore {
- return h.es
-}
-
-func Register(ctx context.Context, configs Configs, bulkLimit, errorCount uint64, view *view.View, es v1.Eventstore, static static.Storage) []query.Handler {
- handlers := []query.Handler{}
- if static != nil {
- handlers = append(handlers, newStyling(ctx,
- handler{view, bulkLimit, configs.cycleDuration("Styling"), errorCount, es},
- static))
+func Register(ctx context.Context, config Config, view *view.View, static static.Storage) {
+ if static == nil {
+ return
}
- return handlers
+
+ newStyling(ctx,
+ config.overwrite("Styling"),
+ static,
+ view,
+ ).Start(ctx)
}
-func (configs Configs) cycleDuration(viewModel string) time.Duration {
- c, ok := configs[viewModel]
+func (config Config) overwrite(viewModel string) handler2.Config {
+ c := handler2.Config{
+ Client: config.Client,
+ Eventstore: config.Eventstore,
+ BulkLimit: uint16(config.BulkLimit),
+ RequeueEvery: 3 * time.Minute,
+ HandleActiveInstances: config.HandleActiveInstances,
+ MaxFailureCount: uint8(config.FailureCountUntilSkip),
+ TransactionDuration: config.TransactionDuration,
+ }
+ overwrite, ok := config.Handlers[viewModel]
if !ok {
- return 3 * time.Minute
+ return c
}
- return c.MinimumCycleDuration
-}
-
-func (h *handler) MinimumCycleDuration() time.Duration {
- return h.cycleDuration
-}
-
-func (h *handler) LockDuration() time.Duration {
- return h.cycleDuration / 3
-}
-
-func (h *handler) QueryLimit() uint64 {
- return h.bulkLimit
+ if overwrite.MinimumCycleDuration > 0 {
+ c.RequeueEvery = overwrite.MinimumCycleDuration
+ }
+ return c
}
diff --git a/internal/admin/repository/eventsourcing/handler/styling.go b/internal/admin/repository/eventsourcing/handler/styling.go
index ed96aa4633..2f8964b519 100644
--- a/internal/admin/repository/eventsourcing/handler/styling.go
+++ b/internal/admin/repository/eventsourcing/handler/styling.go
@@ -9,15 +9,12 @@ import (
"github.com/lucasb-eyer/go-colorful"
"github.com/muesli/gamut"
- "github.com/zitadel/logging"
+ admin_view "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/api/ui/login"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
iam_model "github.com/zitadel/zitadel/internal/iam/repository/view/model"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -28,152 +25,231 @@ const (
stylingTable = "adminapi.styling2"
)
+var _ handler.Projection = (*Styling)(nil)
+
type Styling struct {
- handler
- static static.Storage
- subscription *v1.Subscription
+ static static.Storage
+ view *admin_view.View
}
-func newStyling(ctx context.Context, handler handler, static static.Storage) *Styling {
- h := &Styling{
- handler: handler,
- static: static,
- }
- h.subscribe(ctx)
-
- return h
+func newStyling(ctx context.Context, config handler.Config, static static.Storage, view *admin_view.View) *handler.Handler {
+ return handler.NewHandler(
+ ctx,
+ &config,
+ &Styling{
+ static: static,
+ view: view,
+ },
+ )
}
-func (m *Styling) subscribe(ctx context.Context) {
- m.subscription = m.es.Subscribe(m.AggregateTypes()...)
- go func() {
- for event := range m.subscription.Events {
- query.ReduceEvent(ctx, m, event)
- }
- }()
-}
-
-func (m *Styling) ViewModel() string {
+// Name implements [handler.Projection]
+func (*Styling) Name() string {
return stylingTable
}
-func (m *Styling) Subscription() *v1.Subscription {
- return m.subscription
-}
-
-func (_ *Styling) AggregateTypes() []models.AggregateType {
- return []models.AggregateType{org.AggregateType, instance.AggregateType}
-}
-
-func (m *Styling) CurrentSequence(ctx context.Context, instanceID string) (uint64, error) {
- sequence, err := m.view.GetLatestStylingSequence(ctx, instanceID)
- if err != nil {
- return 0, err
+// Reducers implements [handler.Projection]
+func (s *Styling) Reducers() []handler.AggregateReducer {
+ return []handler.AggregateReducer{
+ {
+ Aggregate: org.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: org.LabelPolicyAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyChangedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyLogoAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyLogoRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyIconAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyIconRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyLogoDarkAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyLogoDarkRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyIconDarkAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyIconDarkRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyFontAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyFontRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyAssetsRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.LabelPolicyActivatedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: org.OrgRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ },
+ },
+ {
+ Aggregate: instance.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: instance.LabelPolicyAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyChangedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyLogoAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyLogoRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyIconAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyIconRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyLogoDarkAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyLogoDarkRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyIconDarkAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyIconDarkRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyFontAddedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyFontRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyAssetsRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.LabelPolicyActivatedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ {
+ Event: instance.InstanceRemovedEventType,
+ Reduce: s.processLabelPolicy,
+ },
+ },
+ },
}
- return sequence.CurrentSequence, nil
}
-func (m *Styling) EventQuery(ctx context.Context, instanceIDs []string) (*models.SearchQuery, error) {
- sequences, err := m.view.GetLatestStylingSequences(ctx, instanceIDs)
- if err != nil {
- return nil, err
- }
- searchQuery := models.NewSearchQuery()
- for _, instanceID := range instanceIDs {
- var seq uint64
- for _, sequence := range sequences {
- if sequence.InstanceID == instanceID {
- seq = sequence.CurrentSequence
- break
+func (m *Styling) processLabelPolicy(event eventstore.Event) (_ *handler.Statement, err error) {
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ policy := new(iam_model.LabelPolicyView)
+ switch event.Type() {
+ case instance.LabelPolicyAddedEventType,
+ org.LabelPolicyAddedEventType:
+ err = policy.AppendEvent(event)
+ case instance.LabelPolicyChangedEventType,
+ org.LabelPolicyChangedEventType,
+ instance.LabelPolicyLogoAddedEventType,
+ org.LabelPolicyLogoAddedEventType,
+ instance.LabelPolicyLogoRemovedEventType,
+ org.LabelPolicyLogoRemovedEventType,
+ instance.LabelPolicyIconAddedEventType,
+ org.LabelPolicyIconAddedEventType,
+ instance.LabelPolicyIconRemovedEventType,
+ org.LabelPolicyIconRemovedEventType,
+ instance.LabelPolicyLogoDarkAddedEventType,
+ org.LabelPolicyLogoDarkAddedEventType,
+ instance.LabelPolicyLogoDarkRemovedEventType,
+ org.LabelPolicyLogoDarkRemovedEventType,
+ instance.LabelPolicyIconDarkAddedEventType,
+ org.LabelPolicyIconDarkAddedEventType,
+ instance.LabelPolicyIconDarkRemovedEventType,
+ org.LabelPolicyIconDarkRemovedEventType,
+ instance.LabelPolicyFontAddedEventType,
+ org.LabelPolicyFontAddedEventType,
+ instance.LabelPolicyFontRemovedEventType,
+ org.LabelPolicyFontRemovedEventType,
+ instance.LabelPolicyAssetsRemovedEventType,
+ org.LabelPolicyAssetsRemovedEventType:
+
+ policy, err = m.view.StylingByAggregateIDAndState(event.Aggregate().ID, event.Aggregate().InstanceID, int32(domain.LabelPolicyStatePreview))
+ if err != nil {
+ return err
}
+ err = policy.AppendEvent(event)
+ case instance.LabelPolicyActivatedEventType,
+ org.LabelPolicyActivatedEventType:
+
+ policy, err = m.view.StylingByAggregateIDAndState(event.Aggregate().ID, event.Aggregate().InstanceID, int32(domain.LabelPolicyStatePreview))
+ if err != nil {
+ return err
+ }
+ err = policy.AppendEvent(event)
+ if err != nil {
+ return err
+ }
+ err = m.generateStylingFile(policy)
+ case instance.InstanceRemovedEventType:
+ err = m.deleteInstanceFilesFromStorage(event.Aggregate().InstanceID)
+ if err != nil {
+ return err
+ }
+ return m.view.DeleteInstanceStyling(event)
+ case org.OrgRemovedEventType:
+ return m.view.UpdateOrgOwnerRemovedStyling(event)
+ default:
+ return nil
}
- searchQuery.AddQuery().
- AggregateTypeFilter(m.AggregateTypes()...).
- LatestSequenceFilter(seq).
- InstanceIDFilter(instanceID)
- }
- return searchQuery, nil
-}
-
-func (m *Styling) Reduce(event *models.Event) (err error) {
- switch event.AggregateType {
- case org.AggregateType, instance.AggregateType:
- err = m.processLabelPolicy(event)
- }
- return err
-}
-
-func (m *Styling) processLabelPolicy(event *models.Event) (err error) {
- policy := new(iam_model.LabelPolicyView)
- switch eventstore.EventType(event.Type) {
- case instance.LabelPolicyAddedEventType,
- org.LabelPolicyAddedEventType:
- err = policy.AppendEvent(event)
- case instance.LabelPolicyChangedEventType,
- org.LabelPolicyChangedEventType,
- instance.LabelPolicyLogoAddedEventType,
- org.LabelPolicyLogoAddedEventType,
- instance.LabelPolicyLogoRemovedEventType,
- org.LabelPolicyLogoRemovedEventType,
- instance.LabelPolicyIconAddedEventType,
- org.LabelPolicyIconAddedEventType,
- instance.LabelPolicyIconRemovedEventType,
- org.LabelPolicyIconRemovedEventType,
- instance.LabelPolicyLogoDarkAddedEventType,
- org.LabelPolicyLogoDarkAddedEventType,
- instance.LabelPolicyLogoDarkRemovedEventType,
- org.LabelPolicyLogoDarkRemovedEventType,
- instance.LabelPolicyIconDarkAddedEventType,
- org.LabelPolicyIconDarkAddedEventType,
- instance.LabelPolicyIconDarkRemovedEventType,
- org.LabelPolicyIconDarkRemovedEventType,
- instance.LabelPolicyFontAddedEventType,
- org.LabelPolicyFontAddedEventType,
- instance.LabelPolicyFontRemovedEventType,
- org.LabelPolicyFontRemovedEventType,
- instance.LabelPolicyAssetsRemovedEventType,
- org.LabelPolicyAssetsRemovedEventType:
- policy, err = m.view.StylingByAggregateIDAndState(event.AggregateID, event.InstanceID, int32(domain.LabelPolicyStatePreview))
if err != nil {
return err
}
- err = policy.AppendEvent(event)
- case instance.LabelPolicyActivatedEventType,
- org.LabelPolicyActivatedEventType:
- policy, err = m.view.StylingByAggregateIDAndState(event.AggregateID, event.InstanceID, int32(domain.LabelPolicyStatePreview))
- if err != nil {
- return err
- }
- err = policy.AppendEvent(event)
- if err != nil {
- return err
- }
- err = m.generateStylingFile(policy)
- case instance.InstanceRemovedEventType:
- err = m.deleteInstanceFilesFromStorage(event.InstanceID)
- if err != nil {
- return err
- }
- return m.view.DeleteInstanceStyling(event)
- case org.OrgRemovedEventType:
- return m.view.UpdateOrgOwnerRemovedStyling(event)
- default:
- return m.view.ProcessedStylingSequence(event)
- }
- if err != nil {
- return err
- }
- return m.view.PutStyling(policy, event)
-}
-
-func (m *Styling) OnError(event *models.Event, err error) error {
- logging.WithFields("id", event.AggregateID).WithError(err).Warn("something went wrong in label policy handler")
- return spooler.HandleError(event, err, m.view.GetLatestStylingFailedEvent, m.view.ProcessedStylingFailedEvent, m.view.ProcessedStylingSequence, m.errorCountUntilSkip)
-}
-
-func (m *Styling) OnSuccess(instanceIDs []string) error {
- return spooler.HandleSuccess(m.view.UpdateStylingSpoolerRunTimestamp, instanceIDs)
+ return m.view.PutStyling(policy, event)
+ }), nil
}
func (m *Styling) generateStylingFile(policy *iam_model.LabelPolicyView) error {
diff --git a/internal/admin/repository/eventsourcing/repository.go b/internal/admin/repository/eventsourcing/repository.go
index febc2629de..fadab88645 100644
--- a/internal/admin/repository/eventsourcing/repository.go
+++ b/internal/admin/repository/eventsourcing/repository.go
@@ -3,46 +3,23 @@ package eventsourcing
import (
"context"
- "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/eventstore"
- "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/spooler"
+ admin_handler "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/handler"
admin_view "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/database"
- eventstore2 "github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- es_spol "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
"github.com/zitadel/zitadel/internal/static"
)
type Config struct {
- SearchLimit uint64
- Spooler spooler.SpoolerConfig
+ Spooler admin_handler.Config
}
-type EsRepository struct {
- spooler *es_spol.Spooler
- eventstore.AdministratorRepo
-}
-
-func Start(ctx context.Context, conf Config, static static.Storage, dbClient *database.DB, esV2 *eventstore2.Eventstore, allowOrderByCreationDate bool) (*EsRepository, error) {
- es, err := v1.Start(dbClient, allowOrderByCreationDate)
- if err != nil {
- return nil, err
- }
+func Start(ctx context.Context, conf Config, static static.Storage, dbClient *database.DB) error {
view, err := admin_view.StartView(dbClient)
if err != nil {
- return nil, err
+ return err
}
- spool := spooler.StartSpooler(ctx, conf.Spooler, es, esV2, view, dbClient, static)
+ admin_handler.Register(ctx, conf.Spooler, view, static)
- return &EsRepository{
- spooler: spool,
- AdministratorRepo: eventstore.AdministratorRepo{
- View: view,
- },
- }, nil
-}
-
-func (repo *EsRepository) Health(ctx context.Context) error {
return nil
}
diff --git a/internal/admin/repository/eventsourcing/spooler/lock.go b/internal/admin/repository/eventsourcing/spooler/lock.go
deleted file mode 100644
index 7da3ea9371..0000000000
--- a/internal/admin/repository/eventsourcing/spooler/lock.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package spooler
-
-import (
- "database/sql"
- "time"
-
- es_locker "github.com/zitadel/zitadel/internal/eventstore/v1/locker"
-)
-
-const (
- lockTable = "adminapi.locks"
-)
-
-type locker struct {
- dbClient *sql.DB
-}
-
-func (l *locker) Renew(lockerID, viewModel, instanceID string, waitTime time.Duration) error {
- return es_locker.Renew(l.dbClient, lockTable, lockerID, viewModel, instanceID, waitTime)
-}
diff --git a/internal/admin/repository/eventsourcing/spooler/spooler.go b/internal/admin/repository/eventsourcing/spooler/spooler.go
deleted file mode 100644
index 8b9fa592dd..0000000000
--- a/internal/admin/repository/eventsourcing/spooler/spooler.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package spooler
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/handler"
- "github.com/zitadel/zitadel/internal/admin/repository/eventsourcing/view"
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
- "github.com/zitadel/zitadel/internal/static"
-)
-
-type SpoolerConfig struct {
- BulkLimit uint64
- FailureCountUntilSkip uint64
- ConcurrentWorkers int
- ConcurrentInstances int
- Handlers handler.Configs
-}
-
-func StartSpooler(ctx context.Context, c SpoolerConfig, es v1.Eventstore, esV2 *eventstore.Eventstore, view *view.View, sql *database.DB, static static.Storage) *spooler.Spooler {
- spoolerConfig := spooler.Config{
- Eventstore: es,
- EventstoreV2: esV2,
- Locker: &locker{dbClient: sql.DB},
- ConcurrentWorkers: c.ConcurrentWorkers,
- ConcurrentInstances: c.ConcurrentInstances,
- ViewHandlers: handler.Register(ctx, c.Handlers, c.BulkLimit, c.FailureCountUntilSkip, view, es, static),
- }
- spool := spoolerConfig.New()
- spool.Start()
- return spool
-}
diff --git a/internal/admin/repository/eventsourcing/view/error_event.go b/internal/admin/repository/eventsourcing/view/error_event.go
deleted file mode 100644
index 3b47119630..0000000000
--- a/internal/admin/repository/eventsourcing/view/error_event.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package view
-
-import (
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-const (
- errTable = "adminapi.failed_events"
- errColumn = "failed_events"
-)
-
-func (v *View) saveFailedEvent(failedEvent *repository.FailedEvent) error {
- return repository.SaveFailedEvent(v.Db, errTable, failedEvent)
-}
-
-func (v *View) RemoveFailedEvent(database string, failedEvent *repository.FailedEvent) error {
- return repository.RemoveFailedEvent(v.Db, database+"."+errColumn, failedEvent)
-}
-
-func (v *View) latestFailedEvent(viewName, instanceID string, sequence uint64) (*repository.FailedEvent, error) {
- return repository.LatestFailedEvent(v.Db, errTable, viewName, instanceID, sequence)
-}
-
-func (v *View) AllFailedEvents(db, instanceID string) ([]*repository.FailedEvent, error) {
- return repository.AllFailedEvents(v.Db, db+"."+errColumn, instanceID)
-}
diff --git a/internal/admin/repository/eventsourcing/view/sequence.go b/internal/admin/repository/eventsourcing/view/sequence.go
deleted file mode 100644
index 8de577f89e..0000000000
--- a/internal/admin/repository/eventsourcing/view/sequence.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package view
-
-import (
- "context"
- "time"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-const (
- sequencesTable = "adminapi.current_sequences"
-)
-
-func (v *View) saveCurrentSequence(viewName string, event *models.Event) error {
- return repository.SaveCurrentSequence(v.Db, sequencesTable, viewName, event.InstanceID, event.Sequence, event.CreationDate)
-}
-
-func (v *View) latestSequence(ctx context.Context, viewName, instanceID string) (*repository.CurrentSequence, error) {
- return repository.LatestSequence(v.Db, v.TimeTravel(ctx, sequencesTable), viewName, instanceID)
-}
-
-func (v *View) latestSequences(ctx context.Context, viewName string, instanceIDs []string) ([]*repository.CurrentSequence, error) {
- return repository.LatestSequences(v.Db, v.TimeTravel(ctx, sequencesTable), viewName, instanceIDs)
-}
-
-func (v *View) AllCurrentSequences(db, instanceID string) ([]*repository.CurrentSequence, error) {
- return repository.AllCurrentSequences(v.Db, db+".current_sequences", instanceID)
-}
-
-func (v *View) updateSpoolerRunSequence(viewName string, instanceIDs []string) error {
- currentSequences, err := repository.LatestSequences(v.Db, sequencesTable, viewName, instanceIDs)
- if err != nil {
- return err
- }
- for _, currentSequence := range currentSequences {
- if currentSequence.ViewName == "" {
- currentSequence.ViewName = viewName
- }
- currentSequence.LastSuccessfulSpoolerRun = time.Now()
- }
- return repository.UpdateCurrentSequences(v.Db, sequencesTable, currentSequences)
-}
-
-func (v *View) ClearView(db, viewName string) error {
- truncateView := db + "." + viewName
- sequenceTable := db + ".current_sequences"
- return repository.ClearView(v.Db, truncateView, sequenceTable)
-}
diff --git a/internal/admin/repository/eventsourcing/view/styling.go b/internal/admin/repository/eventsourcing/view/styling.go
index ac477b5d96..8ee15a1941 100644
--- a/internal/admin/repository/eventsourcing/view/styling.go
+++ b/internal/admin/repository/eventsourcing/view/styling.go
@@ -1,12 +1,9 @@
package view
import (
- "context"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/iam/repository/view"
"github.com/zitadel/zitadel/internal/iam/repository/view/model"
- global_view "github.com/zitadel/zitadel/internal/view/repository"
)
const (
@@ -17,50 +14,14 @@ func (v *View) StylingByAggregateIDAndState(aggregateID, instanceID string, stat
return view.GetStylingByAggregateIDAndState(v.Db, stylingTyble, aggregateID, instanceID, state)
}
-func (v *View) PutStyling(policy *model.LabelPolicyView, event *models.Event) error {
- err := view.PutStyling(v.Db, stylingTyble, policy)
- if err != nil {
- return err
- }
- return v.ProcessedStylingSequence(event)
+func (v *View) PutStyling(policy *model.LabelPolicyView, event eventstore.Event) error {
+ return view.PutStyling(v.Db, stylingTyble, policy)
}
-func (v *View) DeleteInstanceStyling(event *models.Event) error {
- err := view.DeleteInstanceStyling(v.Db, stylingTyble, event.InstanceID)
- if err != nil {
- return err
- }
- return v.ProcessedStylingSequence(event)
+func (v *View) DeleteInstanceStyling(event eventstore.Event) error {
+ return view.DeleteInstanceStyling(v.Db, stylingTyble, event.Aggregate().InstanceID)
}
-func (v *View) UpdateOrgOwnerRemovedStyling(event *models.Event) error {
- err := view.UpdateOrgOwnerRemovedStyling(v.Db, stylingTyble, event.InstanceID, event.AggregateID)
- if err != nil {
- return err
- }
- return v.ProcessedStylingSequence(event)
-}
-
-func (v *View) GetLatestStylingSequence(ctx context.Context, instanceID string) (*global_view.CurrentSequence, error) {
- return v.latestSequence(ctx, stylingTyble, instanceID)
-}
-
-func (v *View) GetLatestStylingSequences(ctx context.Context, instanceIDs []string) ([]*global_view.CurrentSequence, error) {
- return v.latestSequences(ctx, stylingTyble, instanceIDs)
-}
-
-func (v *View) ProcessedStylingSequence(event *models.Event) error {
- return v.saveCurrentSequence(stylingTyble, event)
-}
-
-func (v *View) UpdateStylingSpoolerRunTimestamp(instanceIDs []string) error {
- return v.updateSpoolerRunSequence(stylingTyble, instanceIDs)
-}
-
-func (v *View) GetLatestStylingFailedEvent(sequence uint64, instanceID string) (*global_view.FailedEvent, error) {
- return v.latestFailedEvent(stylingTyble, instanceID, sequence)
-}
-
-func (v *View) ProcessedStylingFailedEvent(failedEvent *global_view.FailedEvent) error {
- return v.saveFailedEvent(failedEvent)
+func (v *View) UpdateOrgOwnerRemovedStyling(event eventstore.Event) error {
+ return view.UpdateOrgOwnerRemovedStyling(v.Db, stylingTyble, event.Aggregate().InstanceID, event.Aggregate().ID)
}
diff --git a/internal/admin/repository/repository.go b/internal/admin/repository/repository.go
deleted file mode 100644
index cefaf02a36..0000000000
--- a/internal/admin/repository/repository.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package repository
-
-import "context"
-
-type Repository interface {
- Health(ctx context.Context) error
- AdministratorRepository
-}
diff --git a/internal/api/authz/context.go b/internal/api/authz/context.go
index 0d022879ca..a916dfcc8a 100644
--- a/internal/api/authz/context.go
+++ b/internal/api/authz/context.go
@@ -91,13 +91,7 @@ func VerifyTokenAndCreateCtxData(ctx context.Context, token, orgID, orgDomain st
verifiedOrgID, err := t.ExistsOrg(ctx, orgID, orgDomain)
if err != nil {
- err = retry(func() error {
- verifiedOrgID, err = t.ExistsOrg(ctx, orgID, orgDomain)
- return err
- })
- if err != nil {
- return CtxData{}, errors.ThrowPermissionDenied(nil, "AUTH-Bs7Ds", "Organisation doesn't exist")
- }
+ return CtxData{}, errors.ThrowPermissionDenied(nil, "AUTH-Bs7Ds", "Organisation doesn't exist")
}
return CtxData{
diff --git a/internal/api/authz/permissions.go b/internal/api/authz/permissions.go
index 4312651bd4..a7f26b2d0b 100644
--- a/internal/api/authz/permissions.go
+++ b/internal/api/authz/permissions.go
@@ -16,10 +16,8 @@ func CheckPermission(ctx context.Context, resolver MembershipsResolver, roleMapp
_, userPermissionSpan := tracing.NewNamedSpan(ctx, "checkUserPermissions")
err = checkUserResourcePermissions(requestedPermissions, resourceID)
userPermissionSpan.EndWithError(err)
- if err != nil {
- return err
- }
- return nil
+
+ return err
}
// getUserPermissions retrieves the memberships of the authenticated user (on instance and provided organisation level),
@@ -33,23 +31,17 @@ func getUserPermissions(ctx context.Context, resolver MembershipsResolver, requi
}
ctx = context.WithValue(ctx, dataKey, ctxData)
- memberships, err := resolver.SearchMyMemberships(ctx, orgID)
+ memberships, err := resolver.SearchMyMemberships(ctx, orgID, false)
if err != nil {
return nil, nil, err
}
if len(memberships) == 0 {
- err = retry(func() error {
- memberships, err = resolver.SearchMyMemberships(ctx, orgID)
- if err != nil {
- return err
- }
- if len(memberships) == 0 {
- return errors.ThrowNotFound(nil, "AUTHZ-cdgFk", "membership not found")
- }
- return nil
- })
+ memberships, err = resolver.SearchMyMemberships(ctx, orgID, true)
+ if len(memberships) == 0 {
+ return nil, nil, errors.ThrowNotFound(nil, "AUTHZ-cdgFk", "membership not found")
+ }
if err != nil {
- return nil, nil, nil
+ return nil, nil, err
}
}
requestedPermissions, allPermissions = mapMembershipsToPermissions(requiredPerm, memberships, roleMappings)
diff --git a/internal/api/authz/permissions_test.go b/internal/api/authz/permissions_test.go
index 01cfa3543c..41b1ff2b8f 100644
--- a/internal/api/authz/permissions_test.go
+++ b/internal/api/authz/permissions_test.go
@@ -18,7 +18,7 @@ type testVerifier struct {
func (v *testVerifier) VerifyAccessToken(ctx context.Context, token, clientID, projectID string) (string, string, string, string, string, error) {
return "userID", "agentID", "clientID", "de", "orgID", nil
}
-func (v *testVerifier) SearchMyMemberships(ctx context.Context, orgID string) ([]*Membership, error) {
+func (v *testVerifier) SearchMyMemberships(ctx context.Context, orgID string, _ bool) ([]*Membership, error) {
return v.memberships, nil
}
diff --git a/internal/api/authz/retry.go b/internal/api/authz/retry.go
deleted file mode 100644
index b22cb542fc..0000000000
--- a/internal/api/authz/retry.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package authz
-
-import "time"
-
-//TODO: workaround if org projection is not yet up-to-date
-func retry(retriable func() error) (err error) {
- for i := 0; i < 3; i++ {
- time.Sleep(500 * time.Millisecond)
- err = retriable()
- if err == nil {
- return nil
- }
- }
- return err
-}
diff --git a/internal/api/authz/retry_test.go b/internal/api/authz/retry_test.go
deleted file mode 100644
index 685509b955..0000000000
--- a/internal/api/authz/retry_test.go
+++ /dev/null
@@ -1,88 +0,0 @@
-package authz
-
-import (
- "errors"
- "testing"
-)
-
-func Test_retry(t *testing.T) {
- type args struct {
- retriable func(*int) func() error
- }
- type want struct {
- executions int
- err bool
- }
- tests := []struct {
- name string
- args args
- want want
- }{
- {
- name: "1 execution",
- args: args{
- retriable: func(execs *int) func() error {
- return func() error {
- if *execs < 1 {
- *execs++
- return errors.New("not 1")
- }
- return nil
- }
- },
- },
- want: want{
- err: false,
- executions: 1,
- },
- },
- {
- name: "2 execution",
- args: args{
- retriable: func(execs *int) func() error {
- return func() error {
- if *execs < 2 {
- *execs++
- return errors.New("not 2")
- }
- return nil
- }
- },
- },
- want: want{
- err: false,
- executions: 2,
- },
- },
- {
- name: "too many execution",
- args: args{
- retriable: func(execs *int) func() error {
- return func() error {
- if *execs < 3 {
- *execs++
- return errors.New("not 3")
- }
- return nil
- }
- },
- },
- want: want{
- err: true,
- executions: 3,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- var execs int
-
- if err := retry(tt.args.retriable(&execs)); (err != nil) != tt.want.err {
- t.Errorf("retry() error = %v, want.err %v", err, tt.want.err)
- }
- if execs != tt.want.executions {
- t.Errorf("retry() executions: want: %d got: %d", tt.want.executions, execs)
- }
- })
- }
-}
diff --git a/internal/api/authz/token.go b/internal/api/authz/token.go
index 615543093b..afb4af4bf3 100644
--- a/internal/api/authz/token.go
+++ b/internal/api/authz/token.go
@@ -32,13 +32,13 @@ type TokenVerifier struct {
}
type MembershipsResolver interface {
- SearchMyMemberships(ctx context.Context, orgID string) ([]*Membership, error)
+ SearchMyMemberships(ctx context.Context, orgID string, shouldTriggerBulk bool) ([]*Membership, error)
}
type authZRepo interface {
+ MembershipsResolver
VerifyAccessToken(ctx context.Context, token, verifierClientID, projectID string) (userID, agentID, clientID, prefLang, resourceOwner string, err error)
VerifierClientID(ctx context.Context, name string) (clientID, projectID string, err error)
- SearchMyMemberships(ctx context.Context, orgID string) ([]*Membership, error)
ProjectIDAndOriginsByClientID(ctx context.Context, clientID string) (projectID string, origins []string, err error)
ExistsOrg(ctx context.Context, id, domain string) (string, error)
}
@@ -135,10 +135,10 @@ func (v *TokenVerifier) RegisterServer(appName, methodPrefix string, mappings Me
}
}
-func (v *TokenVerifier) SearchMyMemberships(ctx context.Context, orgID string) (_ []*Membership, err error) {
+func (v *TokenVerifier) SearchMyMemberships(ctx context.Context, orgID string, shouldTriggerBulk bool) (_ []*Membership, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
- return v.authZRepo.SearchMyMemberships(ctx, orgID)
+ return v.authZRepo.SearchMyMemberships(ctx, orgID, shouldTriggerBulk)
}
func (v *TokenVerifier) ProjectIDAndOriginsByClientID(ctx context.Context, clientID string) (_ string, _ []string, err error) {
diff --git a/internal/api/grpc/admin/event.go b/internal/api/grpc/admin/event.go
index 04f7026fb3..2c7a2fe63f 100644
--- a/internal/api/grpc/admin/event.go
+++ b/internal/api/grpc/admin/event.go
@@ -57,15 +57,19 @@ func eventRequestToFilter(ctx context.Context, req *admin_pb.ListEventsRequest)
OrderDesc().
InstanceID(authz.GetInstance(ctx).InstanceID()).
Limit(limit).
+ AwaitOpenTransactions().
ResourceOwner(req.ResourceOwner).
EditorUser(req.EditorUserId).
- AddQuery().
- AggregateIDs(aggregateIDs...).
- AggregateTypes(aggregateTypes...).
- EventTypes(eventTypes...).
CreationDateAfter(req.CreationDate.AsTime()).
- SequenceGreater(req.Sequence).
- Builder()
+ SequenceGreater(req.Sequence)
+
+ if len(aggregateIDs) > 0 || len(aggregateTypes) > 0 || len(eventTypes) > 0 {
+ builder.AddQuery().
+ AggregateIDs(aggregateIDs...).
+ AggregateTypes(aggregateTypes...).
+ EventTypes(eventTypes...).
+ Builder()
+ }
if req.Asc {
builder.OrderAsc()
diff --git a/internal/api/grpc/admin/failed_event.go b/internal/api/grpc/admin/failed_event.go
index c6bbf98d1f..fd08de377b 100644
--- a/internal/api/grpc/admin/failed_event.go
+++ b/internal/api/grpc/admin/failed_event.go
@@ -10,11 +10,6 @@ import (
func (s *Server) ListFailedEvents(ctx context.Context, _ *admin_pb.ListFailedEventsRequest) (*admin_pb.ListFailedEventsResponse, error) {
instanceID := authz.GetInstance(ctx).InstanceID()
- failedEventsOld, err := s.administrator.GetFailedEvents(ctx, instanceID)
- if err != nil {
- return nil, err
- }
- convertedOld := FailedEventsViewToPb(failedEventsOld)
instanceIDQuery, err := query.NewFailedEventInstanceIDSearchQuery(instanceID)
if err != nil {
return nil, err
@@ -25,17 +20,11 @@ func (s *Server) ListFailedEvents(ctx context.Context, _ *admin_pb.ListFailedEve
if err != nil {
return nil, err
}
- convertedNew := FailedEventsToPb(s.database, failedEvents)
- return &admin_pb.ListFailedEventsResponse{Result: append(convertedOld, convertedNew...)}, nil
+ return &admin_pb.ListFailedEventsResponse{Result: FailedEventsToPb(s.database, failedEvents)}, nil
}
func (s *Server) RemoveFailedEvent(ctx context.Context, req *admin_pb.RemoveFailedEventRequest) (*admin_pb.RemoveFailedEventResponse, error) {
- var err error
- if req.Database != s.database {
- err = s.administrator.RemoveFailedEvent(ctx, RemoveFailedEventRequestToModel(ctx, req))
- } else {
- err = s.query.RemoveFailedEvent(ctx, req.ViewName, authz.GetInstance(ctx).InstanceID(), req.FailedSequence)
- }
+ err := s.query.RemoveFailedEvent(ctx, req.ViewName, authz.GetInstance(ctx).InstanceID(), req.FailedSequence)
if err != nil {
return nil, err
}
diff --git a/internal/api/grpc/admin/failed_event_converter.go b/internal/api/grpc/admin/failed_event_converter.go
index 90c040e748..05d7cc6d60 100644
--- a/internal/api/grpc/admin/failed_event_converter.go
+++ b/internal/api/grpc/admin/failed_event_converter.go
@@ -1,39 +1,12 @@
package admin
import (
- "context"
-
"google.golang.org/protobuf/types/known/timestamppb"
- "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/query"
- "github.com/zitadel/zitadel/internal/view/model"
admin_pb "github.com/zitadel/zitadel/pkg/grpc/admin"
)
-func FailedEventsViewToPb(failedEvents []*model.FailedEvent) []*admin_pb.FailedEvent {
- events := make([]*admin_pb.FailedEvent, len(failedEvents))
- for i, failedEvent := range failedEvents {
- events[i] = FailedEventViewToPb(failedEvent)
- }
- return events
-}
-
-func FailedEventViewToPb(failedEvent *model.FailedEvent) *admin_pb.FailedEvent {
- var lastFailed *timestamppb.Timestamp
- if !failedEvent.LastFailed.IsZero() {
- lastFailed = timestamppb.New(failedEvent.LastFailed)
- }
- return &admin_pb.FailedEvent{
- Database: failedEvent.Database,
- ViewName: failedEvent.ViewName,
- FailedSequence: failedEvent.FailedSequence,
- FailureCount: failedEvent.FailureCount,
- ErrorMessage: failedEvent.ErrMsg,
- LastFailed: lastFailed,
- }
-}
-
func FailedEventsToPb(database string, failedEvents *query.FailedEvents) []*admin_pb.FailedEvent {
events := make([]*admin_pb.FailedEvent, len(failedEvents.FailedEvents))
for i, failedEvent := range failedEvents.FailedEvents {
@@ -56,12 +29,3 @@ func FailedEventToPb(database string, failedEvent *query.FailedEvent) *admin_pb.
LastFailed: lastFailed,
}
}
-
-func RemoveFailedEventRequestToModel(ctx context.Context, req *admin_pb.RemoveFailedEventRequest) *model.FailedEvent {
- return &model.FailedEvent{
- Database: req.Database,
- ViewName: req.ViewName,
- FailedSequence: req.FailedSequence,
- InstanceID: authz.GetInstance(ctx).InstanceID(),
- }
-}
diff --git a/internal/api/grpc/admin/failed_event_converter_test.go b/internal/api/grpc/admin/failed_event_converter_test.go
deleted file mode 100644
index 6edc36c1e2..0000000000
--- a/internal/api/grpc/admin/failed_event_converter_test.go
+++ /dev/null
@@ -1,101 +0,0 @@
-package admin
-
-import (
- "context"
- "testing"
- "time"
-
- "github.com/zitadel/zitadel/internal/api/authz"
- "github.com/zitadel/zitadel/internal/test"
- "github.com/zitadel/zitadel/internal/view/model"
- admin_pb "github.com/zitadel/zitadel/pkg/grpc/admin"
-)
-
-func TestFailedEventsToPbFields(t *testing.T) {
- type args struct {
- failedEvents []*model.FailedEvent
- }
- tests := []struct {
- name string
- args args
- }{
- {
- name: "all fields",
- args: args{
- failedEvents: []*model.FailedEvent{
- {
- Database: "admin",
- ViewName: "users",
- FailedSequence: 456,
- FailureCount: 5,
- LastFailed: time.Now(),
- ErrMsg: "some error",
- },
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got := FailedEventsViewToPb(tt.args.failedEvents)
- for _, g := range got {
- test.AssertFieldsMapped(t, g)
- }
- })
- }
-}
-
-func TestFailedEventToPbFields(t *testing.T) {
- type args struct {
- failedEvent *model.FailedEvent
- }
- tests := []struct {
- name string
- args args
- }{
- {
- "all fields",
- args{
- failedEvent: &model.FailedEvent{
- Database: "admin",
- ViewName: "users",
- FailedSequence: 456,
- FailureCount: 5,
- LastFailed: time.Now(),
- ErrMsg: "some error",
- },
- },
- },
- }
- for _, tt := range tests {
- converted := FailedEventViewToPb(tt.args.failedEvent)
- test.AssertFieldsMapped(t, converted)
- }
-}
-
-func TestRemoveFailedEventRequestToModelFields(t *testing.T) {
- type args struct {
- ctx context.Context
- req *admin_pb.RemoveFailedEventRequest
- }
- tests := []struct {
- name string
- args args
- }{
- {
- "all fields",
- args{
- ctx: authz.WithInstanceID(context.Background(), "instanceID"),
- req: &admin_pb.RemoveFailedEventRequest{
- Database: "admin",
- ViewName: "users",
- FailedSequence: 456,
- },
- },
- },
- }
- for _, tt := range tests {
- converted := RemoveFailedEventRequestToModel(tt.args.ctx, tt.args.req)
- test.AssertFieldsMapped(t, converted, "FailureCount", "LastFailed", "ErrMsg")
- }
-}
diff --git a/internal/api/grpc/admin/iam_member.go b/internal/api/grpc/admin/iam_member.go
index 45efdaba7d..3e06e8223f 100644
--- a/internal/api/grpc/admin/iam_member.go
+++ b/internal/api/grpc/admin/iam_member.go
@@ -27,7 +27,7 @@ func (s *Server) ListIAMMembers(ctx context.Context, req *admin_pb.ListIAMMember
return nil, err
}
return &admin_pb.ListIAMMembersResponse{
- Details: object.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: object.ToListDetails(res.Count, res.Sequence, res.LastRun),
//TODO: resource owner of user of the member instead of the membership resource owner
Result: member.MembersToPb("", res.Members),
}, nil
diff --git a/internal/api/grpc/admin/iam_settings.go b/internal/api/grpc/admin/iam_settings.go
index a4be248eec..53a5969d14 100644
--- a/internal/api/grpc/admin/iam_settings.go
+++ b/internal/api/grpc/admin/iam_settings.go
@@ -19,7 +19,7 @@ func (s *Server) ListSecretGenerators(ctx context.Context, req *admin_pb.ListSec
}
return &admin_pb.ListSecretGeneratorsResponse{
Result: SecretGeneratorsToPb(result.SecretGenerators),
- Details: object.ToListDetails(result.Count, result.Sequence, result.Timestamp),
+ Details: object.ToListDetails(result.Count, result.Sequence, result.LastRun),
}, nil
}
diff --git a/internal/api/grpc/admin/idp.go b/internal/api/grpc/admin/idp.go
index f382946ed7..8182ad63b9 100644
--- a/internal/api/grpc/admin/idp.go
+++ b/internal/api/grpc/admin/idp.go
@@ -30,7 +30,7 @@ func (s *Server) ListIDPs(ctx context.Context, req *admin_pb.ListIDPsRequest) (*
}
return &admin_pb.ListIDPsResponse{
Result: idp_grpc.IDPViewsToPb(resp.IDPs),
- Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.Timestamp),
+ Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.LastRun),
}, nil
}
@@ -175,7 +175,7 @@ func (s *Server) ListProviders(ctx context.Context, req *admin_pb.ListProvidersR
}
return &admin_pb.ListProvidersResponse{
Result: idp_grpc.ProvidersToPb(resp.Templates),
- Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.Timestamp),
+ Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.LastRun),
}, nil
}
diff --git a/internal/api/grpc/admin/instance.go b/internal/api/grpc/admin/instance.go
index 4359e73f18..f973c8a320 100644
--- a/internal/api/grpc/admin/instance.go
+++ b/internal/api/grpc/admin/instance.go
@@ -33,7 +33,7 @@ func (s *Server) ListInstanceDomains(ctx context.Context, req *admin_pb.ListInst
Details: object.ToListDetails(
domains.Count,
domains.Sequence,
- domains.Timestamp,
+ domains.LastRun,
),
}, nil
}
diff --git a/internal/api/grpc/admin/login_policy.go b/internal/api/grpc/admin/login_policy.go
index 8d95a6979e..6b751bec86 100644
--- a/internal/api/grpc/admin/login_policy.go
+++ b/internal/api/grpc/admin/login_policy.go
@@ -42,7 +42,7 @@ func (s *Server) ListLoginPolicyIDPs(ctx context.Context, req *admin_pb.ListLogi
}
return &admin_pb.ListLoginPolicyIDPsResponse{
Result: idp.IDPLoginPolicyLinksToPb(res.Links),
- Details: object.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: object.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
@@ -88,7 +88,7 @@ func (s *Server) ListLoginPolicySecondFactors(ctx context.Context, req *admin_pb
return nil, err
}
return &admin_pb.ListLoginPolicySecondFactorsResponse{
- Details: object.ToListDetails(result.Count, result.Sequence, result.Timestamp),
+ Details: object.ToListDetails(result.Count, result.Sequence, result.LastRun),
Result: policy_grpc.ModelSecondFactorTypesToPb(result.Factors),
}, nil
}
@@ -119,7 +119,7 @@ func (s *Server) ListLoginPolicyMultiFactors(ctx context.Context, req *admin_pb.
return nil, err
}
return &admin_pb.ListLoginPolicyMultiFactorsResponse{
- Details: object.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: object.ToListDetails(res.Count, res.Sequence, res.LastRun),
Result: policy_grpc.ModelMultiFactorTypesToPb(res.Factors),
}, nil
}
diff --git a/internal/api/grpc/admin/org.go b/internal/api/grpc/admin/org.go
index 80cb76571d..7b95494d01 100644
--- a/internal/api/grpc/admin/org.go
+++ b/internal/api/grpc/admin/org.go
@@ -61,7 +61,7 @@ func (s *Server) ListOrgs(ctx context.Context, req *admin_pb.ListOrgsRequest) (*
}
return &admin_pb.ListOrgsResponse{
Result: org_grpc.OrgViewsToPb(orgs.Orgs),
- Details: object.ToListDetails(orgs.Count, orgs.Sequence, orgs.Timestamp),
+ Details: object.ToListDetails(orgs.Count, orgs.Sequence, orgs.LastRun),
}, nil
}
diff --git a/internal/api/grpc/admin/server.go b/internal/api/grpc/admin/server.go
index d25bd4b3d4..7fe8e32f34 100644
--- a/internal/api/grpc/admin/server.go
+++ b/internal/api/grpc/admin/server.go
@@ -6,7 +6,6 @@ import (
"google.golang.org/grpc"
- "github.com/zitadel/zitadel/internal/admin/repository"
"github.com/zitadel/zitadel/internal/admin/repository/eventsourcing"
"github.com/zitadel/zitadel/internal/api/assets"
"github.com/zitadel/zitadel/internal/api/authz"
@@ -29,7 +28,6 @@ type Server struct {
database string
command *command.Commands
query *query.Queries
- administrator repository.AdministratorRepository
assetsAPIDomain func(context.Context) string
userCodeAlg crypto.EncryptionAlgorithm
passwordHashAlg crypto.HashAlgorithm
@@ -45,7 +43,6 @@ func CreateServer(
command *command.Commands,
query *query.Queries,
sd systemdefaults.SystemDefaults,
- repo repository.Repository,
externalSecure bool,
userCodeAlg crypto.EncryptionAlgorithm,
auditLogRetention time.Duration,
@@ -54,7 +51,6 @@ func CreateServer(
database: database,
command: command,
query: query,
- administrator: repo,
assetsAPIDomain: assets.AssetAPI(externalSecure),
userCodeAlg: userCodeAlg,
passwordHashAlg: crypto.NewBCrypt(sd.SecretGenerators.PasswordSaltCost),
diff --git a/internal/api/grpc/admin/sms.go b/internal/api/grpc/admin/sms.go
index 9f46eb8b67..18e11b23df 100644
--- a/internal/api/grpc/admin/sms.go
+++ b/internal/api/grpc/admin/sms.go
@@ -18,7 +18,7 @@ func (s *Server) ListSMSProviders(ctx context.Context, req *admin_pb.ListSMSProv
return nil, err
}
return &admin_pb.ListSMSProvidersResponse{
- Details: object.ToListDetails(result.Count, result.Sequence, result.Timestamp),
+ Details: object.ToListDetails(result.Count, result.Sequence, result.LastRun),
Result: SMSConfigsToPb(result.Configs),
}, nil
}
diff --git a/internal/api/grpc/admin/view.go b/internal/api/grpc/admin/view.go
index d7fa30f42c..ef281ae2ce 100644
--- a/internal/api/grpc/admin/view.go
+++ b/internal/api/grpc/admin/view.go
@@ -10,23 +10,15 @@ import (
func (s *Server) ListViews(ctx context.Context, _ *admin_pb.ListViewsRequest) (*admin_pb.ListViewsResponse, error) {
instanceID := authz.GetInstance(ctx).InstanceID()
- instanceIDQuery, err := query.NewCurrentSequencesInstanceIDSearchQuery(instanceID)
+ instanceIDQuery, err := query.NewCurrentStatesInstanceIDSearchQuery(instanceID)
if err != nil {
return nil, err
}
- currentSequences, err := s.query.SearchCurrentSequences(ctx, &query.CurrentSequencesSearchQueries{
+ currentSequences, err := s.query.SearchCurrentStates(ctx, &query.CurrentStateSearchQueries{
Queries: []query.SearchQuery{instanceIDQuery},
})
if err != nil {
return nil, err
}
- convertedCurrentSequences := CurrentSequencesToPb(s.database, currentSequences)
- views, err := s.administrator.GetViews(instanceID)
- if err != nil {
- return nil, err
- }
- convertedViews := ViewsToPb(views)
-
- convertedCurrentSequences = append(convertedCurrentSequences, convertedViews...)
- return &admin_pb.ListViewsResponse{Result: convertedCurrentSequences}, nil
+ return &admin_pb.ListViewsResponse{Result: CurrentSequencesToPb(s.database, currentSequences)}, nil
}
diff --git a/internal/api/grpc/admin/view_converter.go b/internal/api/grpc/admin/view_converter.go
index f9d28185e7..9e5b9da94b 100644
--- a/internal/api/grpc/admin/view_converter.go
+++ b/internal/api/grpc/admin/view_converter.go
@@ -4,41 +4,23 @@ import (
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/zitadel/zitadel/internal/query"
- "github.com/zitadel/zitadel/internal/view/model"
admin_pb "github.com/zitadel/zitadel/pkg/grpc/admin"
)
-func ViewsToPb(views []*model.View) []*admin_pb.View {
- v := make([]*admin_pb.View, len(views))
- for i, view := range views {
- v[i] = ViewToPb(view)
- }
- return v
-}
-
-func ViewToPb(view *model.View) *admin_pb.View {
- return &admin_pb.View{
- Database: view.Database,
- ViewName: view.ViewName,
- LastSuccessfulSpoolerRun: timestamppb.New(view.LastSuccessfulSpoolerRun),
- ProcessedSequence: view.CurrentSequence,
- EventTimestamp: timestamppb.New(view.EventTimestamp),
- }
-}
-
-func CurrentSequencesToPb(database string, currentSequences *query.CurrentSequences) []*admin_pb.View {
- v := make([]*admin_pb.View, len(currentSequences.CurrentSequences))
- for i, currentSequence := range currentSequences.CurrentSequences {
+func CurrentSequencesToPb(database string, currentSequences *query.CurrentStates) []*admin_pb.View {
+ v := make([]*admin_pb.View, len(currentSequences.CurrentStates))
+ for i, currentSequence := range currentSequences.CurrentStates {
v[i] = CurrentSequenceToPb(database, currentSequence)
}
return v
}
-func CurrentSequenceToPb(database string, currentSequence *query.CurrentSequence) *admin_pb.View {
+func CurrentSequenceToPb(database string, currentSequence *query.CurrentState) *admin_pb.View {
return &admin_pb.View{
Database: database,
ViewName: currentSequence.ProjectionName,
- ProcessedSequence: currentSequence.CurrentSequence,
- LastSuccessfulSpoolerRun: timestamppb.New(currentSequence.Timestamp),
+ ProcessedSequence: currentSequence.Sequence,
+ LastSuccessfulSpoolerRun: timestamppb.New(currentSequence.LastRun),
+ EventTimestamp: timestamppb.New(currentSequence.EventCreatedAt),
}
}
diff --git a/internal/api/grpc/auth/idp.go b/internal/api/grpc/auth/idp.go
index 10879a5d8a..9d1759ae8b 100644
--- a/internal/api/grpc/auth/idp.go
+++ b/internal/api/grpc/auth/idp.go
@@ -19,7 +19,7 @@ func (s *Server) ListMyLinkedIDPs(ctx context.Context, req *auth_pb.ListMyLinked
}
return &auth_pb.ListMyLinkedIDPsResponse{
Result: idp_grpc.IDPUserLinksToPb(links.Links),
- Details: object.ToListDetails(links.Count, links.Sequence, links.Timestamp),
+ Details: object.ToListDetails(links.Count, links.Sequence, links.LastRun),
}, nil
}
diff --git a/internal/api/grpc/auth/permission.go b/internal/api/grpc/auth/permission.go
index 5f45542dae..4c0019cf57 100644
--- a/internal/api/grpc/auth/permission.go
+++ b/internal/api/grpc/auth/permission.go
@@ -48,12 +48,12 @@ func (s *Server) ListMyMemberships(ctx context.Context, req *auth_pb.ListMyMembe
if err != nil {
return nil, err
}
- response, err := s.query.Memberships(ctx, request, false)
+ response, err := s.query.Memberships(ctx, request, false, false)
if err != nil {
return nil, err
}
return &auth_pb.ListMyMembershipsResponse{
Result: user_grpc.MembershipsToMembershipsPb(response.Memberships),
- Details: object.ToListDetails(response.Count, response.Sequence, response.Timestamp),
+ Details: object.ToListDetails(response.Count, response.Sequence, response.LastRun),
}, nil
}
diff --git a/internal/api/grpc/auth/user.go b/internal/api/grpc/auth/user.go
index 41a7fee19f..11ecb95cf8 100644
--- a/internal/api/grpc/auth/user.go
+++ b/internal/api/grpc/auth/user.go
@@ -44,7 +44,7 @@ func (s *Server) RemoveMyUser(ctx context.Context, _ *auth_pb.RemoveMyUserReques
}
memberships, err := s.query.Memberships(ctx, &query.MembershipSearchQuery{
Queries: []query.SearchQuery{userQuery},
- }, false)
+ }, false, false)
if err != nil {
return nil, err
}
@@ -73,9 +73,10 @@ func (s *Server) ListMyUserChanges(ctx context.Context, req *auth_pb.ListMyUserC
AllowTimeTravel().
Limit(limit).
OrderDesc().
+ AwaitOpenTransactions().
ResourceOwner(authz.GetCtxData(ctx).ResourceOwner).
- AddQuery().
SequenceGreater(sequence).
+ AddQuery().
AggregateTypes(user.AggregateType).
AggregateIDs(authz.GetCtxData(ctx).UserID).
Builder()
@@ -104,7 +105,7 @@ func (s *Server) ListMyMetadata(ctx context.Context, req *auth_pb.ListMyMetadata
}
return &auth_pb.ListMyMetadataResponse{
Result: metadata.UserMetadataListToPb(res.Metadata),
- Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
@@ -158,7 +159,7 @@ func (s *Server) ListMyUserGrants(ctx context.Context, req *auth_pb.ListMyUserGr
}
return &auth_pb.ListMyUserGrantsResponse{
Result: UserGrantsToPb(res.UserGrants),
- Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
@@ -225,7 +226,7 @@ func (s *Server) ListMyProjectOrgs(ctx context.Context, req *auth_pb.ListMyProje
return nil, err
}
return &auth_pb.ListMyProjectOrgsResponse{
- Details: obj_grpc.ToListDetails(orgs.Count, orgs.Sequence, orgs.Timestamp),
+ Details: obj_grpc.ToListDetails(orgs.Count, orgs.Sequence, orgs.LastRun),
Result: org.OrgsToPb(orgs.Orgs),
}, nil
}
@@ -237,7 +238,7 @@ func (s *Server) myOrgsQuery(ctx context.Context, ctxData authz.CtxData) (*query
}
return s.query.Memberships(ctx, &query.MembershipSearchQuery{
Queries: []query.SearchQuery{userQuery},
- }, false)
+ }, false, false)
}
func isIAMAdmin(memberships []*query.Membership) bool {
diff --git a/internal/api/grpc/management/actions.go b/internal/api/grpc/management/actions.go
index 09a0136088..eedddd7fce 100644
--- a/internal/api/grpc/management/actions.go
+++ b/internal/api/grpc/management/actions.go
@@ -19,7 +19,7 @@ func (s *Server) ListActions(ctx context.Context, req *mgmt_pb.ListActionsReques
return nil, err
}
return &mgmt_pb.ListActionsResponse{
- Details: obj_grpc.ToListDetails(actions.Count, actions.Sequence, actions.Timestamp),
+ Details: obj_grpc.ToListDetails(actions.Count, actions.Sequence, actions.LastRun),
Result: action_grpc.ActionsToPb(actions.Actions),
}, nil
}
diff --git a/internal/api/grpc/management/idp.go b/internal/api/grpc/management/idp.go
index 11873d8480..f013015258 100644
--- a/internal/api/grpc/management/idp.go
+++ b/internal/api/grpc/management/idp.go
@@ -30,7 +30,7 @@ func (s *Server) ListOrgIDPs(ctx context.Context, req *mgmt_pb.ListOrgIDPsReques
}
return &mgmt_pb.ListOrgIDPsResponse{
Result: idp_grpc.IDPViewsToPb(resp.IDPs),
- Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.Timestamp),
+ Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.LastRun),
}, nil
}
@@ -167,7 +167,7 @@ func (s *Server) ListProviders(ctx context.Context, req *mgmt_pb.ListProvidersRe
}
return &mgmt_pb.ListProvidersResponse{
Result: idp_grpc.ProvidersToPb(resp.Templates),
- Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.Timestamp),
+ Details: object_pb.ToListDetails(resp.Count, resp.Sequence, resp.LastRun),
}, nil
}
diff --git a/internal/api/grpc/management/org.go b/internal/api/grpc/management/org.go
index df8e76c0e2..5879cd9718 100644
--- a/internal/api/grpc/management/org.go
+++ b/internal/api/grpc/management/org.go
@@ -52,9 +52,10 @@ func (s *Server) ListOrgChanges(ctx context.Context, req *mgmt_pb.ListOrgChanges
AllowTimeTravel().
Limit(limit).
OrderDesc().
+ AwaitOpenTransactions().
ResourceOwner(authz.GetCtxData(ctx).OrgID).
- AddQuery().
SequenceGreater(sequence).
+ AddQuery().
AggregateTypes(org.AggregateType).
AggregateIDs(authz.GetCtxData(ctx).OrgID).
Builder()
@@ -176,7 +177,7 @@ func (s *Server) ListOrgDomains(ctx context.Context, req *mgmt_pb.ListOrgDomains
}
return &mgmt_pb.ListOrgDomainsResponse{
Result: org_grpc.DomainsToPb(domains.Domains),
- Details: object.ToListDetails(domains.Count, domains.Sequence, domains.Timestamp),
+ Details: object.ToListDetails(domains.Count, domains.Sequence, domains.LastRun),
}, nil
}
@@ -272,7 +273,7 @@ func (s *Server) ListOrgMembers(ctx context.Context, req *mgmt_pb.ListOrgMembers
}
return &mgmt_pb.ListOrgMembersResponse{
Result: member_grpc.MembersToPb(s.assetAPIPrefix(ctx), members.Members),
- Details: object.ToListDetails(members.Count, members.Sequence, members.Timestamp),
+ Details: object.ToListDetails(members.Count, members.Sequence, members.LastRun),
}, nil
}
@@ -350,7 +351,7 @@ func (s *Server) ListOrgMetadata(ctx context.Context, req *mgmt_pb.ListOrgMetada
}
return &mgmt_pb.ListOrgMetadataResponse{
Result: metadata.OrgMetadataListToPb(res.Metadata),
- Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
diff --git a/internal/api/grpc/management/policy_login.go b/internal/api/grpc/management/policy_login.go
index d3df45bc87..3aa160353f 100644
--- a/internal/api/grpc/management/policy_login.go
+++ b/internal/api/grpc/management/policy_login.go
@@ -74,7 +74,7 @@ func (s *Server) ListLoginPolicyIDPs(ctx context.Context, req *mgmt_pb.ListLogin
}
return &mgmt_pb.ListLoginPolicyIDPsResponse{
Result: idp.IDPLoginPolicyLinksToPb(res.Links),
- Details: object.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: object.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
@@ -123,7 +123,7 @@ func (s *Server) ListLoginPolicySecondFactors(ctx context.Context, req *mgmt_pb.
return nil, err
}
return &mgmt_pb.ListLoginPolicySecondFactorsResponse{
- Details: object.ToListDetails(result.Count, result.Sequence, result.Timestamp),
+ Details: object.ToListDetails(result.Count, result.Sequence, result.LastRun),
Result: policy_grpc.ModelSecondFactorTypesToPb(result.Factors),
}, nil
}
@@ -154,7 +154,7 @@ func (s *Server) ListLoginPolicyMultiFactors(ctx context.Context, req *mgmt_pb.L
return nil, err
}
return &mgmt_pb.ListLoginPolicyMultiFactorsResponse{
- Details: object.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: object.ToListDetails(res.Count, res.Sequence, res.LastRun),
Result: policy_grpc.ModelMultiFactorTypesToPb(res.Factors),
}, nil
}
diff --git a/internal/api/grpc/management/project.go b/internal/api/grpc/management/project.go
index f0c1f6cc68..9d02dc7a58 100644
--- a/internal/api/grpc/management/project.go
+++ b/internal/api/grpc/management/project.go
@@ -53,7 +53,7 @@ func (s *Server) ListProjects(ctx context.Context, req *mgmt_pb.ListProjectsRequ
}
return &mgmt_pb.ListProjectsResponse{
Result: project_grpc.ProjectViewsToPb(projects.Projects),
- Details: object_grpc.ToListDetails(projects.Count, projects.Sequence, projects.Timestamp),
+ Details: object_grpc.ToListDetails(projects.Count, projects.Sequence, projects.LastRun),
}, nil
}
@@ -74,8 +74,9 @@ func (s *Server) ListProjectGrantChanges(ctx context.Context, req *mgmt_pb.ListP
Limit(limit).
OrderDesc().
ResourceOwner(authz.GetCtxData(ctx).OrgID).
- AddQuery().
+ AwaitOpenTransactions().
SequenceGreater(sequence).
+ AddQuery().
AggregateTypes(project.AggregateType).
AggregateIDs(req.ProjectId).
EventData(map[string]interface{}{
@@ -115,7 +116,7 @@ func (s *Server) ListGrantedProjects(ctx context.Context, req *mgmt_pb.ListGrant
}
return &mgmt_pb.ListGrantedProjectsResponse{
Result: project_grpc.GrantedProjectViewsToPb(projects.ProjectGrants),
- Details: object_grpc.ToListDetails(projects.Count, projects.Sequence, projects.Timestamp),
+ Details: object_grpc.ToListDetails(projects.Count, projects.Sequence, projects.LastRun),
}, nil
}
@@ -134,7 +135,7 @@ func (s *Server) ListGrantedProjectRoles(ctx context.Context, req *mgmt_pb.ListG
}
return &mgmt_pb.ListGrantedProjectRolesResponse{
Result: project_grpc.RoleViewsToPb(roles.ProjectRoles),
- Details: object_grpc.ToListDetails(roles.Count, roles.Sequence, roles.Timestamp),
+ Details: object_grpc.ToListDetails(roles.Count, roles.Sequence, roles.LastRun),
}, nil
}
@@ -153,10 +154,11 @@ func (s *Server) ListProjectChanges(ctx context.Context, req *mgmt_pb.ListProjec
query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
AllowTimeTravel().
Limit(limit).
+ AwaitOpenTransactions().
OrderDesc().
ResourceOwner(authz.GetCtxData(ctx).OrgID).
- AddQuery().
SequenceGreater(sequence).
+ AddQuery().
AggregateTypes(project.AggregateType).
AggregateIDs(req.ProjectId).
Builder()
@@ -259,7 +261,7 @@ func (s *Server) ListProjectRoles(ctx context.Context, req *mgmt_pb.ListProjectR
}
return &mgmt_pb.ListProjectRolesResponse{
Result: project_grpc.RoleViewsToPb(roles.ProjectRoles),
- Details: object_grpc.ToListDetails(roles.Count, roles.Sequence, roles.Timestamp),
+ Details: object_grpc.ToListDetails(roles.Count, roles.Sequence, roles.LastRun),
}, nil
}
@@ -349,7 +351,7 @@ func (s *Server) ListProjectMembers(ctx context.Context, req *mgmt_pb.ListProjec
}
return &mgmt_pb.ListProjectMembersResponse{
Result: member_grpc.MembersToPb(s.assetAPIPrefix(ctx), members.Members),
- Details: object_grpc.ToListDetails(members.Count, members.Sequence, members.Timestamp),
+ Details: object_grpc.ToListDetails(members.Count, members.Sequence, members.LastRun),
}, nil
}
diff --git a/internal/api/grpc/management/project_application.go b/internal/api/grpc/management/project_application.go
index a6b5841c5e..ff053089ed 100644
--- a/internal/api/grpc/management/project_application.go
+++ b/internal/api/grpc/management/project_application.go
@@ -36,7 +36,7 @@ func (s *Server) ListApps(ctx context.Context, req *mgmt_pb.ListAppsRequest) (*m
}
return &mgmt_pb.ListAppsResponse{
Result: project_grpc.AppsToPb(apps.Apps),
- Details: object_grpc.ToListDetails(apps.Count, apps.Sequence, apps.Timestamp),
+ Details: object_grpc.ToListDetails(apps.Count, apps.Sequence, apps.LastRun),
}, nil
}
@@ -55,10 +55,11 @@ func (s *Server) ListAppChanges(ctx context.Context, req *mgmt_pb.ListAppChanges
query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
AllowTimeTravel().
Limit(limit).
+ AwaitOpenTransactions().
OrderDesc().
ResourceOwner(authz.GetCtxData(ctx).OrgID).
- AddQuery().
SequenceGreater(sequence).
+ AddQuery().
AggregateTypes(project.AggregateType).
AggregateIDs(req.ProjectId).
EventData(map[string]interface{}{
@@ -278,7 +279,7 @@ func (s *Server) ListAppKeys(ctx context.Context, req *mgmt_pb.ListAppKeysReques
}
return &mgmt_pb.ListAppKeysResponse{
Result: authn_grpc.KeysToPb(keys.AuthNKeys),
- Details: object_grpc.ToListDetails(keys.Count, keys.Sequence, keys.Timestamp),
+ Details: object_grpc.ToListDetails(keys.Count, keys.Sequence, keys.LastRun),
}, nil
}
diff --git a/internal/api/grpc/management/project_grant.go b/internal/api/grpc/management/project_grant.go
index 21db4dc454..d018dad39d 100644
--- a/internal/api/grpc/management/project_grant.go
+++ b/internal/api/grpc/management/project_grant.go
@@ -37,7 +37,7 @@ func (s *Server) ListProjectGrants(ctx context.Context, req *mgmt_pb.ListProject
}
return &mgmt_pb.ListProjectGrantsResponse{
Result: proj_grpc.GrantedProjectViewsToPb(grants.ProjectGrants),
- Details: object_grpc.ToListDetails(grants.Count, grants.Sequence, grants.Timestamp),
+ Details: object_grpc.ToListDetails(grants.Count, grants.Sequence, grants.LastRun),
}, nil
}
@@ -60,7 +60,7 @@ func (s *Server) ListAllProjectGrants(ctx context.Context, req *mgmt_pb.ListAllP
}
return &mgmt_pb.ListAllProjectGrantsResponse{
Result: proj_grpc.GrantedProjectViewsToPb(grants.ProjectGrants),
- Details: object_grpc.ToListDetails(grants.Count, grants.Sequence, grants.Timestamp),
+ Details: object_grpc.ToListDetails(grants.Count, grants.Sequence, grants.LastRun),
}, nil
}
@@ -170,7 +170,7 @@ func (s *Server) ListProjectGrantMembers(ctx context.Context, req *mgmt_pb.ListP
}
return &mgmt_pb.ListProjectGrantMembersResponse{
Result: member_grpc.MembersToPb(s.assetAPIPrefix(ctx), response.Members),
- Details: object_grpc.ToListDetails(response.Count, response.Sequence, response.Timestamp),
+ Details: object_grpc.ToListDetails(response.Count, response.Sequence, response.LastRun),
}, nil
}
diff --git a/internal/api/grpc/management/user.go b/internal/api/grpc/management/user.go
index 804a905210..d7a9c56dca 100644
--- a/internal/api/grpc/management/user.go
+++ b/internal/api/grpc/management/user.go
@@ -78,7 +78,7 @@ func (s *Server) ListUsers(ctx context.Context, req *mgmt_pb.ListUsersRequest) (
}
return &mgmt_pb.ListUsersResponse{
Result: user_grpc.UsersToPb(res.Users, s.assetAPIPrefix(ctx)),
- Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
@@ -97,10 +97,11 @@ func (s *Server) ListUserChanges(ctx context.Context, req *mgmt_pb.ListUserChang
query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
AllowTimeTravel().
Limit(limit).
+ AwaitOpenTransactions().
OrderDesc().
ResourceOwner(authz.GetCtxData(ctx).OrgID).
- AddQuery().
SequenceGreater(sequence).
+ AddQuery().
AggregateTypes(user.AggregateType).
AggregateIDs(req.UserId).
Builder()
@@ -151,7 +152,7 @@ func (s *Server) ListUserMetadata(ctx context.Context, req *mgmt_pb.ListUserMeta
}
return &mgmt_pb.ListUserMetadataResponse{
Result: metadata.UserMetadataListToPb(res.Metadata),
- Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
@@ -383,7 +384,7 @@ func (s *Server) removeUserDependencies(ctx context.Context, userID string) ([]*
}
memberships, err := s.query.Memberships(ctx, &query.MembershipSearchQuery{
Queries: []query.SearchQuery{membershipsUserQuery},
- }, true)
+ }, true, false)
if err != nil {
return nil, nil, err
}
@@ -752,7 +753,7 @@ func (s *Server) ListMachineKeys(ctx context.Context, req *mgmt_pb.ListMachineKe
}
return &mgmt_pb.ListMachineKeysResponse{
Result: authn.KeysToPb(result.AuthNKeys),
- Details: obj_grpc.ToListDetails(result.Count, result.Sequence, result.Timestamp),
+ Details: obj_grpc.ToListDetails(result.Count, result.Sequence, result.LastRun),
}, nil
}
@@ -845,7 +846,7 @@ func (s *Server) ListPersonalAccessTokens(ctx context.Context, req *mgmt_pb.List
}
return &mgmt_pb.ListPersonalAccessTokensResponse{
Result: user_grpc.PersonalAccessTokensToPb(result.PersonalAccessTokens),
- Details: obj_grpc.ToListDetails(result.Count, result.Sequence, result.Timestamp),
+ Details: obj_grpc.ToListDetails(result.Count, result.Sequence, result.LastRun),
}, nil
}
@@ -884,7 +885,7 @@ func (s *Server) ListHumanLinkedIDPs(ctx context.Context, req *mgmt_pb.ListHuman
}
return &mgmt_pb.ListHumanLinkedIDPsResponse{
Result: idp_grpc.IDPUserLinksToPb(res.Links),
- Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
func (s *Server) RemoveHumanLinkedIDP(ctx context.Context, req *mgmt_pb.RemoveHumanLinkedIDPRequest) (*mgmt_pb.RemoveHumanLinkedIDPResponse, error) {
@@ -902,13 +903,13 @@ func (s *Server) ListUserMemberships(ctx context.Context, req *mgmt_pb.ListUserM
if err != nil {
return nil, err
}
- response, err := s.query.Memberships(ctx, request, false)
+ response, err := s.query.Memberships(ctx, request, false, false)
if err != nil {
return nil, err
}
return &mgmt_pb.ListUserMembershipsResponse{
Result: user_grpc.MembershipsToMembershipsPb(response.Memberships),
- Details: obj_grpc.ToListDetails(response.Count, response.Sequence, response.Timestamp),
+ Details: obj_grpc.ToListDetails(response.Count, response.Sequence, response.LastRun),
}, nil
}
diff --git a/internal/api/grpc/management/user_grant.go b/internal/api/grpc/management/user_grant.go
index 7dc4a1e58a..b13a01976c 100644
--- a/internal/api/grpc/management/user_grant.go
+++ b/internal/api/grpc/management/user_grant.go
@@ -39,7 +39,7 @@ func (s *Server) ListUserGrants(ctx context.Context, req *mgmt_pb.ListUserGrantR
}
return &mgmt_pb.ListUserGrantResponse{
Result: user.UserGrantsToPb(s.assetAPIPrefix(ctx), res.UserGrants),
- Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: obj_grpc.ToListDetails(res.Count, res.Sequence, res.LastRun),
}, nil
}
diff --git a/internal/api/grpc/management/user_integration_test.go b/internal/api/grpc/management/user_integration_test.go
index ab1e149bda..6b5fe77d1a 100644
--- a/internal/api/grpc/management/user_integration_test.go
+++ b/internal/api/grpc/management/user_integration_test.go
@@ -10,7 +10,6 @@ import (
"testing"
"time"
- "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"golang.org/x/text/language"
"google.golang.org/grpc/codes"
@@ -49,7 +48,6 @@ func TestMain(m *testing.M) {
// Get calls would return a Not Found error.
func TestImport_and_Get(t *testing.T) {
const N = 100
- var misses int
for i := 0; i < N; i++ {
firstName := strconv.Itoa(i)
@@ -76,18 +74,11 @@ func TestImport_and_Get(t *testing.T) {
_, err = Client.GetUserByID(CTX, &management.GetUserByIDRequest{Id: res.GetUserId()})
- if s, ok := status.FromError(err); ok {
- if s == nil {
- return
- }
- if s.Code() == codes.NotFound {
- t.Log(s)
- misses++
- return
- }
+ s, ok := status.FromError(err)
+ if ok && s != nil && s.Code() == codes.NotFound {
+ t.Errorf("iteration %d: user with id %q not found", i, res.GetUserId())
}
require.NoError(t, err) // catch and fail on any other error
})
}
- assert.Zerof(t, misses, "Not Found errors %d out of %d", misses, N)
}
diff --git a/internal/api/grpc/object/converter.go b/internal/api/grpc/object/converter.go
index 1fd703c777..85fdf5fba0 100644
--- a/internal/api/grpc/object/converter.go
+++ b/internal/api/grpc/object/converter.go
@@ -82,7 +82,7 @@ func AddToDetailsPb(
}
func ToListDetails(
- totalResult,
+ totalResult uint64,
processedSequence uint64,
viewTimestamp time.Time,
) *object_pb.ListDetails {
diff --git a/internal/api/grpc/object/v2/converter.go b/internal/api/grpc/object/v2/converter.go
index 36c6a322bc..7253c919b5 100644
--- a/internal/api/grpc/object/v2/converter.go
+++ b/internal/api/grpc/object/v2/converter.go
@@ -26,9 +26,7 @@ func ToListDetails(response query.SearchResponse) *object.ListDetails {
details := &object.ListDetails{
TotalResult: response.Count,
ProcessedSequence: response.Sequence,
- }
- if !response.Timestamp.IsZero() {
- details.Timestamp = timestamppb.New(response.Timestamp)
+ Timestamp: timestamppb.New(response.EventCreatedAt),
}
return details
diff --git a/internal/api/grpc/server/middleware/auth_interceptor_test.go b/internal/api/grpc/server/middleware/auth_interceptor_test.go
index ac091e1d11..6e22d1352b 100644
--- a/internal/api/grpc/server/middleware/auth_interceptor_test.go
+++ b/internal/api/grpc/server/middleware/auth_interceptor_test.go
@@ -24,7 +24,7 @@ type verifierMock struct{}
func (v *verifierMock) VerifyAccessToken(ctx context.Context, token, clientID, projectID string) (string, string, string, string, string, error) {
return "", "", "", "", "", nil
}
-func (v *verifierMock) SearchMyMemberships(ctx context.Context, orgID string) ([]*authz.Membership, error) {
+func (v *verifierMock) SearchMyMemberships(ctx context.Context, orgID string, _ bool) ([]*authz.Membership, error) {
return nil, nil
}
diff --git a/internal/api/grpc/system/failed_event.go b/internal/api/grpc/system/failed_event.go
index c01afea60c..6371ddc3b0 100644
--- a/internal/api/grpc/system/failed_event.go
+++ b/internal/api/grpc/system/failed_event.go
@@ -8,27 +8,15 @@ import (
)
func (s *Server) ListFailedEvents(ctx context.Context, _ *system_pb.ListFailedEventsRequest) (*system_pb.ListFailedEventsResponse, error) {
- failedEventsOld, err := s.administrator.GetFailedEvents(ctx, "")
- if err != nil {
- return nil, err
- }
- convertedOld := FailedEventsViewToPb(failedEventsOld)
-
failedEvents, err := s.query.SearchFailedEvents(ctx, new(query.FailedEventSearchQueries))
if err != nil {
return nil, err
}
- convertedNew := FailedEventsToPb(s.database, failedEvents)
- return &system_pb.ListFailedEventsResponse{Result: append(convertedOld, convertedNew...)}, nil
+ return &system_pb.ListFailedEventsResponse{Result: FailedEventsToPb(s.database, failedEvents)}, nil
}
func (s *Server) RemoveFailedEvent(ctx context.Context, req *system_pb.RemoveFailedEventRequest) (*system_pb.RemoveFailedEventResponse, error) {
- var err error
- if req.Database != s.database {
- err = s.administrator.RemoveFailedEvent(ctx, RemoveFailedEventRequestToModel(req))
- } else {
- err = s.query.RemoveFailedEvent(ctx, req.ViewName, req.InstanceId, req.FailedSequence)
- }
+ err := s.query.RemoveFailedEvent(ctx, req.ViewName, req.InstanceId, req.FailedSequence)
if err != nil {
return nil, err
}
diff --git a/internal/api/grpc/system/failed_event_converter.go b/internal/api/grpc/system/failed_event_converter.go
index 65316477a3..96dd71889b 100644
--- a/internal/api/grpc/system/failed_event_converter.go
+++ b/internal/api/grpc/system/failed_event_converter.go
@@ -4,33 +4,9 @@ import (
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/zitadel/zitadel/internal/query"
- "github.com/zitadel/zitadel/internal/view/model"
system_pb "github.com/zitadel/zitadel/pkg/grpc/system"
)
-func FailedEventsViewToPb(failedEvents []*model.FailedEvent) []*system_pb.FailedEvent {
- events := make([]*system_pb.FailedEvent, len(failedEvents))
- for i, failedEvent := range failedEvents {
- events[i] = FailedEventViewToPb(failedEvent)
- }
- return events
-}
-
-func FailedEventViewToPb(failedEvent *model.FailedEvent) *system_pb.FailedEvent {
- var lastFailed *timestamppb.Timestamp
- if !failedEvent.LastFailed.IsZero() {
- lastFailed = timestamppb.New(failedEvent.LastFailed)
- }
- return &system_pb.FailedEvent{
- Database: failedEvent.Database,
- ViewName: failedEvent.ViewName,
- FailedSequence: failedEvent.FailedSequence,
- FailureCount: failedEvent.FailureCount,
- ErrorMessage: failedEvent.ErrMsg,
- LastFailed: lastFailed,
- }
-}
-
func FailedEventsToPb(database string, failedEvents *query.FailedEvents) []*system_pb.FailedEvent {
events := make([]*system_pb.FailedEvent, len(failedEvents.FailedEvents))
for i, failedEvent := range failedEvents.FailedEvents {
@@ -53,12 +29,3 @@ func FailedEventToPb(database string, failedEvent *query.FailedEvent) *system_pb
LastFailed: lastFailed,
}
}
-
-func RemoveFailedEventRequestToModel(req *system_pb.RemoveFailedEventRequest) *model.FailedEvent {
- return &model.FailedEvent{
- Database: req.Database,
- ViewName: req.ViewName,
- FailedSequence: req.FailedSequence,
- InstanceID: req.InstanceId,
- }
-}
diff --git a/internal/api/grpc/system/failed_event_converter_test.go b/internal/api/grpc/system/failed_event_converter_test.go
deleted file mode 100644
index f91c2d1b4f..0000000000
--- a/internal/api/grpc/system/failed_event_converter_test.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package system_test
-
-import (
- "testing"
- "time"
-
- system_grpc "github.com/zitadel/zitadel/internal/api/grpc/system"
- "github.com/zitadel/zitadel/internal/test"
- "github.com/zitadel/zitadel/internal/view/model"
- system_pb "github.com/zitadel/zitadel/pkg/grpc/system"
-)
-
-func TestFailedEventsToPbFields(t *testing.T) {
- type args struct {
- failedEvents []*model.FailedEvent
- }
- tests := []struct {
- name string
- args args
- }{
- {
- name: "all fields",
- args: args{
- failedEvents: []*model.FailedEvent{
- {
- Database: "admin",
- ViewName: "users",
- FailedSequence: 456,
- FailureCount: 5,
- LastFailed: time.Now(),
- ErrMsg: "some error",
- },
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got := system_grpc.FailedEventsViewToPb(tt.args.failedEvents)
- for _, g := range got {
- test.AssertFieldsMapped(t, g)
- }
- })
- }
-}
-
-func TestFailedEventToPbFields(t *testing.T) {
- type args struct {
- failedEvent *model.FailedEvent
- }
- tests := []struct {
- name string
- args args
- }{
- {
- "all fields",
- args{
- failedEvent: &model.FailedEvent{
- Database: "admin",
- ViewName: "users",
- FailedSequence: 456,
- FailureCount: 5,
- LastFailed: time.Now(),
- ErrMsg: "some error",
- },
- },
- },
- }
- for _, tt := range tests {
- converted := system_grpc.FailedEventViewToPb(tt.args.failedEvent)
- test.AssertFieldsMapped(t, converted)
- }
-}
-
-func TestRemoveFailedEventRequestToModelFields(t *testing.T) {
- type args struct {
- req *system_pb.RemoveFailedEventRequest
- }
- tests := []struct {
- name string
- args args
- }{
- {
- "all fields",
- args{
- req: &system_pb.RemoveFailedEventRequest{
- Database: "admin",
- ViewName: "users",
- FailedSequence: 456,
- InstanceId: "instanceID",
- },
- },
- },
- }
- for _, tt := range tests {
- converted := system_grpc.RemoveFailedEventRequestToModel(tt.args.req)
- test.AssertFieldsMapped(t, converted, "FailureCount", "LastFailed", "ErrMsg")
- }
-}
diff --git a/internal/api/grpc/system/instance.go b/internal/api/grpc/system/instance.go
index 1d711062c2..b4a1386fb8 100644
--- a/internal/api/grpc/system/instance.go
+++ b/internal/api/grpc/system/instance.go
@@ -103,7 +103,7 @@ func (s *Server) ListIAMMembers(ctx context.Context, req *system_pb.ListIAMMembe
return nil, err
}
return &system_pb.ListIAMMembersResponse{
- Details: object.ToListDetails(res.Count, res.Sequence, res.Timestamp),
+ Details: object.ToListDetails(res.Count, res.Sequence, res.LastRun),
//TODO: resource owner of user of the member instead of the membership resource owner
Result: member.MembersToPb("", res.Members),
}, nil
@@ -146,7 +146,7 @@ func (s *Server) ListDomains(ctx context.Context, req *system_pb.ListDomainsRequ
}
return &system_pb.ListDomainsResponse{
Result: instance_grpc.DomainsToPb(domains.Domains),
- Details: object.ToListDetails(domains.Count, domains.Sequence, domains.Timestamp),
+ Details: object.ToListDetails(domains.Count, domains.Sequence, domains.LastRun),
}, nil
}
diff --git a/internal/api/grpc/system/server.go b/internal/api/grpc/system/server.go
index dd947c950f..3995ca28fc 100644
--- a/internal/api/grpc/system/server.go
+++ b/internal/api/grpc/system/server.go
@@ -3,7 +3,6 @@ package system
import (
"google.golang.org/grpc"
- "github.com/zitadel/zitadel/internal/admin/repository"
"github.com/zitadel/zitadel/internal/admin/repository/eventsourcing"
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/grpc/server"
@@ -23,7 +22,6 @@ type Server struct {
database string
command *command.Commands
query *query.Queries
- administrator repository.AdministratorRepository
defaultInstance command.InstanceSetup
externalDomain string
}
@@ -35,7 +33,6 @@ type Config struct {
func CreateServer(
command *command.Commands,
query *query.Queries,
- repo repository.Repository,
database string,
defaultInstance command.InstanceSetup,
externalDomain string,
@@ -43,7 +40,6 @@ func CreateServer(
return &Server{
command: command,
query: query,
- administrator: repo,
database: database,
defaultInstance: defaultInstance,
externalDomain: externalDomain,
diff --git a/internal/api/grpc/system/view.go b/internal/api/grpc/system/view.go
index 261b1d40b0..f89b925d4b 100644
--- a/internal/api/grpc/system/view.go
+++ b/internal/api/grpc/system/view.go
@@ -8,28 +8,15 @@ import (
)
func (s *Server) ListViews(ctx context.Context, _ *system_pb.ListViewsRequest) (*system_pb.ListViewsResponse, error) {
- currentSequences, err := s.query.SearchCurrentSequences(ctx, new(query.CurrentSequencesSearchQueries))
+ currentSequences, err := s.query.SearchCurrentStates(ctx, new(query.CurrentStateSearchQueries))
if err != nil {
return nil, err
}
- convertedCurrentSequences := CurrentSequencesToPb(s.database, currentSequences)
- views, err := s.administrator.GetViews("")
- if err != nil {
- return nil, err
- }
- convertedViews := ViewsToPb(views)
-
- convertedCurrentSequences = append(convertedCurrentSequences, convertedViews...)
- return &system_pb.ListViewsResponse{Result: convertedCurrentSequences}, nil
+ return &system_pb.ListViewsResponse{Result: CurrentSequencesToPb(s.database, currentSequences)}, nil
}
func (s *Server) ClearView(ctx context.Context, req *system_pb.ClearViewRequest) (*system_pb.ClearViewResponse, error) {
- var err error
- if req.Database != s.database {
- err = s.administrator.ClearView(ctx, req.Database, req.ViewName)
- } else {
- err = s.query.ClearCurrentSequence(ctx, req.ViewName)
- }
+ err := s.query.ClearCurrentSequence(ctx, req.ViewName)
if err != nil {
return nil, err
}
diff --git a/internal/api/grpc/system/view_converter.go b/internal/api/grpc/system/view_converter.go
index 6b11376c5d..60d4c623ea 100644
--- a/internal/api/grpc/system/view_converter.go
+++ b/internal/api/grpc/system/view_converter.go
@@ -4,41 +4,22 @@ import (
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/zitadel/zitadel/internal/query"
- "github.com/zitadel/zitadel/internal/view/model"
system_pb "github.com/zitadel/zitadel/pkg/grpc/system"
)
-func ViewsToPb(views []*model.View) []*system_pb.View {
- v := make([]*system_pb.View, len(views))
- for i, view := range views {
- v[i] = ViewToPb(view)
- }
- return v
-}
-
-func ViewToPb(view *model.View) *system_pb.View {
- return &system_pb.View{
- Database: view.Database,
- ViewName: view.ViewName,
- LastSuccessfulSpoolerRun: timestamppb.New(view.LastSuccessfulSpoolerRun),
- ProcessedSequence: view.CurrentSequence,
- EventTimestamp: timestamppb.New(view.EventTimestamp),
- }
-}
-
-func CurrentSequencesToPb(database string, currentSequences *query.CurrentSequences) []*system_pb.View {
- v := make([]*system_pb.View, len(currentSequences.CurrentSequences))
- for i, currentSequence := range currentSequences.CurrentSequences {
+func CurrentSequencesToPb(database string, currentSequences *query.CurrentStates) []*system_pb.View {
+ v := make([]*system_pb.View, len(currentSequences.CurrentStates))
+ for i, currentSequence := range currentSequences.CurrentStates {
v[i] = CurrentSequenceToPb(database, currentSequence)
}
return v
}
-func CurrentSequenceToPb(database string, currentSequence *query.CurrentSequence) *system_pb.View {
+func CurrentSequenceToPb(database string, currentSequence *query.CurrentState) *system_pb.View {
return &system_pb.View{
Database: database,
ViewName: currentSequence.ProjectionName,
- ProcessedSequence: currentSequence.CurrentSequence,
- LastSuccessfulSpoolerRun: timestamppb.New(currentSequence.Timestamp),
+ ProcessedSequence: currentSequence.Sequence,
+ LastSuccessfulSpoolerRun: timestamppb.New(currentSequence.LastRun),
}
}
diff --git a/internal/api/grpc/user/v2/password_integration_test.go b/internal/api/grpc/user/v2/password_integration_test.go
index b0074982bd..517bde0a41 100644
--- a/internal/api/grpc/user/v2/password_integration_test.go
+++ b/internal/api/grpc/user/v2/password_integration_test.go
@@ -158,10 +158,7 @@ func TestServer_SetPassword(t *testing.T) {
Password: "InitialPassw0rd!",
},
})
- if err != nil {
- return err
- }
- return nil
+ return err
},
args: args{
ctx: CTX,
diff --git a/internal/api/grpc/user/v2/user_integration_test.go b/internal/api/grpc/user/v2/user_integration_test.go
index 4bb1fe8710..55f0e76a17 100644
--- a/internal/api/grpc/user/v2/user_integration_test.go
+++ b/internal/api/grpc/user/v2/user_integration_test.go
@@ -1136,7 +1136,7 @@ func TestServer_ListAuthenticationMethodTypes(t *testing.T) {
for {
got, err = Client.ListAuthenticationMethodTypes(tt.args.ctx, tt.args.req)
- if err == nil && got.GetDetails().GetProcessedSequence() >= idpLink.GetDetails().GetSequence() {
+ if err == nil && !got.GetDetails().GetTimestamp().AsTime().Before(idpLink.GetDetails().GetChangeDate().AsTime()) {
break
}
select {
diff --git a/internal/api/oidc/key.go b/internal/api/oidc/key.go
index 237af7db49..82884101d6 100644
--- a/internal/api/oidc/key.go
+++ b/internal/api/oidc/key.go
@@ -121,15 +121,15 @@ func (o *OPStorage) getSigningKey(ctx context.Context) (op.SigningKey, error) {
if len(keys.Keys) > 0 {
return o.privateKeyToSigningKey(selectSigningKey(keys.Keys))
}
- var sequence uint64
- if keys.LatestSequence != nil {
- sequence = keys.LatestSequence.Sequence
+ var position float64
+ if keys.State != nil {
+ position = keys.State.Position
}
- return nil, o.refreshSigningKey(ctx, o.signingKeyAlgorithm, sequence)
+ return nil, o.refreshSigningKey(ctx, o.signingKeyAlgorithm, position)
}
-func (o *OPStorage) refreshSigningKey(ctx context.Context, algorithm string, sequence uint64) error {
- ok, err := o.ensureIsLatestKey(ctx, sequence)
+func (o *OPStorage) refreshSigningKey(ctx context.Context, algorithm string, position float64) error {
+ ok, err := o.ensureIsLatestKey(ctx, position)
if err != nil || !ok {
return errors.ThrowInternal(err, "OIDC-ASfh3", "cannot ensure that projection is up to date")
}
@@ -140,12 +140,12 @@ func (o *OPStorage) refreshSigningKey(ctx context.Context, algorithm string, seq
return errors.ThrowInternal(nil, "OIDC-Df1bh", "")
}
-func (o *OPStorage) ensureIsLatestKey(ctx context.Context, sequence uint64) (bool, error) {
+func (o *OPStorage) ensureIsLatestKey(ctx context.Context, position float64) (bool, error) {
maxSequence, err := o.getMaxKeySequence(ctx)
if err != nil {
return false, fmt.Errorf("error retrieving new events: %w", err)
}
- return sequence == maxSequence, nil
+ return position >= maxSequence, nil
}
func (o *OPStorage) privateKeyToSigningKey(key query.PrivateKey) (_ op.SigningKey, err error) {
@@ -183,13 +183,20 @@ func (o *OPStorage) lockAndGenerateSigningKeyPair(ctx context.Context, algorithm
return o.command.GenerateSigningKeyPair(setOIDCCtx(ctx), algorithm)
}
-func (o *OPStorage) getMaxKeySequence(ctx context.Context) (uint64, error) {
+func (o *OPStorage) getMaxKeySequence(ctx context.Context) (float64, error) {
return o.eventstore.LatestSequence(ctx,
eventstore.NewSearchQueryBuilder(eventstore.ColumnsMaxSequence).
ResourceOwner(authz.GetInstance(ctx).InstanceID()).
+ AwaitOpenTransactions().
AllowTimeTravel().
AddQuery().
- AggregateTypes(keypair.AggregateType, instance.AggregateType).
+ AggregateTypes(keypair.AggregateType).
+ EventTypes(
+ keypair.AddedEventType,
+ ).
+ Or().
+ AggregateTypes(instance.AggregateType).
+ EventTypes(instance.InstanceRemovedEventType).
Builder(),
)
}
diff --git a/internal/api/saml/certificate.go b/internal/api/saml/certificate.go
index 9e85e50982..d2bf3bf3e2 100644
--- a/internal/api/saml/certificate.go
+++ b/internal/api/saml/certificate.go
@@ -77,20 +77,20 @@ func (p *Storage) getCertificateAndKey(ctx context.Context, usage domain.KeyUsag
return p.certificateToCertificateAndKey(selectCertificate(certs.Certificates))
}
- var sequence uint64
- if certs.LatestSequence != nil {
- sequence = certs.LatestSequence.Sequence
+ var position float64
+ if certs.State != nil {
+ position = certs.State.Position
}
- return nil, p.refreshCertificate(ctx, usage, sequence)
+ return nil, p.refreshCertificate(ctx, usage, position)
}
func (p *Storage) refreshCertificate(
ctx context.Context,
usage domain.KeyUsage,
- sequence uint64,
+ position float64,
) error {
- ok, err := p.ensureIsLatestCertificate(ctx, sequence)
+ ok, err := p.ensureIsLatestCertificate(ctx, position)
if err != nil {
logging.WithError(err).Error("could not ensure latest key")
return err
@@ -99,20 +99,20 @@ func (p *Storage) refreshCertificate(
logging.Warn("view not up to date, retrying later")
return err
}
- err = p.lockAndGenerateCertificateAndKey(ctx, usage, sequence)
+ err = p.lockAndGenerateCertificateAndKey(ctx, usage)
logging.OnError(err).Warn("could not create signing key")
return nil
}
-func (p *Storage) ensureIsLatestCertificate(ctx context.Context, sequence uint64) (bool, error) {
+func (p *Storage) ensureIsLatestCertificate(ctx context.Context, position float64) (bool, error) {
maxSequence, err := p.getMaxKeySequence(ctx)
if err != nil {
return false, fmt.Errorf("error retrieving new events: %w", err)
}
- return sequence == maxSequence, nil
+ return position >= maxSequence, nil
}
-func (p *Storage) lockAndGenerateCertificateAndKey(ctx context.Context, usage domain.KeyUsage, sequence uint64) error {
+func (p *Storage) lockAndGenerateCertificateAndKey(ctx context.Context, usage domain.KeyUsage) error {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
ctx = setSAMLCtx(ctx)
@@ -152,12 +152,20 @@ func (p *Storage) lockAndGenerateCertificateAndKey(ctx context.Context, usage do
}
}
-func (p *Storage) getMaxKeySequence(ctx context.Context) (uint64, error) {
+func (p *Storage) getMaxKeySequence(ctx context.Context) (float64, error) {
return p.eventstore.LatestSequence(ctx,
eventstore.NewSearchQueryBuilder(eventstore.ColumnsMaxSequence).
ResourceOwner(authz.GetInstance(ctx).InstanceID()).
+ AwaitOpenTransactions().
AddQuery().
- AggregateTypes(keypair.AggregateType, instance.AggregateType).
+ AggregateTypes(keypair.AggregateType).
+ EventTypes(
+ keypair.AddedEventType,
+ keypair.AddedCertificateEventType,
+ ).
+ Or().
+ AggregateTypes(instance.AggregateType).
+ EventTypes(instance.InstanceRemovedEventType).
Builder(),
)
}
diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request.go b/internal/auth/repository/eventsourcing/eventstore/auth_request.go
index 8dbf19455f..24ef2f15f9 100644
--- a/internal/auth/repository/eventsourcing/eventstore/auth_request.go
+++ b/internal/auth/repository/eventsourcing/eventstore/auth_request.go
@@ -16,7 +16,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/query"
@@ -24,7 +23,6 @@ import (
"github.com/zitadel/zitadel/internal/telemetry/tracing"
user_model "github.com/zitadel/zitadel/internal/user/model"
user_view_model "github.com/zitadel/zitadel/internal/user/repository/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
)
const unknownUserID = "UNKNOWN"
@@ -34,7 +32,6 @@ type AuthRequestRepo struct {
Query *query.Queries
AuthRequests cache.AuthRequestCache
View *view.View
- Eventstore v1.Eventstore
UserCodeAlg crypto.EncryptionAlgorithm
LabelPolicyProvider labelPolicyProvider
@@ -69,7 +66,7 @@ type privacyPolicyProvider interface {
type userSessionViewProvider interface {
UserSessionByIDs(string, string, string) (*user_view_model.UserSessionView, error)
UserSessionsByAgentID(string, string) ([]*user_view_model.UserSessionView, error)
- GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error)
+ GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*query.CurrentState, error)
}
type userViewProvider interface {
@@ -93,7 +90,7 @@ type idpUserLinksProvider interface {
}
type userEventProvider interface {
- UserEventsByID(ctx context.Context, id string, sequence uint64, eventTypes []es_models.EventType) ([]*es_models.Event, error)
+ UserEventsByID(ctx context.Context, id string, sequence uint64, eventTypes []eventstore.EventType) ([]eventstore.Event, error)
}
type userCommandProvider interface {
@@ -1436,25 +1433,25 @@ func userSessionsByUserAgentID(ctx context.Context, provider userSessionViewProv
}
var (
- userSessionEventTypes = []es_models.EventType{
- es_models.EventType(user_repo.UserV1PasswordCheckSucceededType),
- es_models.EventType(user_repo.UserV1PasswordCheckFailedType),
- es_models.EventType(user_repo.UserV1MFAOTPCheckSucceededType),
- es_models.EventType(user_repo.UserV1MFAOTPCheckFailedType),
- es_models.EventType(user_repo.UserV1SignedOutType),
- es_models.EventType(user_repo.UserLockedType),
- es_models.EventType(user_repo.UserDeactivatedType),
- es_models.EventType(user_repo.HumanPasswordCheckSucceededType),
- es_models.EventType(user_repo.HumanPasswordCheckFailedType),
- es_models.EventType(user_repo.UserIDPLoginCheckSucceededType),
- es_models.EventType(user_repo.HumanMFAOTPCheckSucceededType),
- es_models.EventType(user_repo.HumanMFAOTPCheckFailedType),
- es_models.EventType(user_repo.HumanSignedOutType),
- es_models.EventType(user_repo.HumanPasswordlessTokenCheckSucceededType),
- es_models.EventType(user_repo.HumanPasswordlessTokenCheckFailedType),
- es_models.EventType(user_repo.HumanU2FTokenCheckSucceededType),
- es_models.EventType(user_repo.HumanU2FTokenCheckFailedType),
- es_models.EventType(user_repo.UserRemovedType),
+ userSessionEventTypes = []eventstore.EventType{
+ user_repo.UserV1PasswordCheckSucceededType,
+ user_repo.UserV1PasswordCheckFailedType,
+ user_repo.UserV1MFAOTPCheckSucceededType,
+ user_repo.UserV1MFAOTPCheckFailedType,
+ user_repo.UserV1SignedOutType,
+ user_repo.UserLockedType,
+ user_repo.UserDeactivatedType,
+ user_repo.HumanPasswordCheckSucceededType,
+ user_repo.HumanPasswordCheckFailedType,
+ user_repo.UserIDPLoginCheckSucceededType,
+ user_repo.HumanMFAOTPCheckSucceededType,
+ user_repo.HumanMFAOTPCheckFailedType,
+ user_repo.HumanSignedOutType,
+ user_repo.HumanPasswordlessTokenCheckSucceededType,
+ user_repo.HumanPasswordlessTokenCheckFailedType,
+ user_repo.HumanU2FTokenCheckSucceededType,
+ user_repo.HumanU2FTokenCheckFailedType,
+ user_repo.UserRemovedType,
}
)
@@ -1471,7 +1468,7 @@ func userSessionByIDs(ctx context.Context, provider userSessionViewProvider, eve
Errorf("could not get current sequence for userSessionByIDs")
session = &user_view_model.UserSessionView{UserAgentID: agentID, UserID: user.ID}
if sequence != nil {
- session.Sequence = sequence.CurrentSequence
+ session.Sequence = sequence.Sequence
}
}
events, err := eventProvider.UserEventsByID(ctx, user.ID, session.Sequence, append(session.EventTypes(), userSessionEventTypes...))
@@ -1481,7 +1478,7 @@ func userSessionByIDs(ctx context.Context, provider userSessionViewProvider, eve
}
sessionCopy := *session
for _, event := range events {
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case user_repo.UserV1PasswordCheckSucceededType,
user_repo.UserV1PasswordCheckFailedType,
user_repo.UserV1MFAOTPCheckSucceededType,
diff --git a/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go b/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go
index 7a469e4729..95ad95a32d 100644
--- a/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go
+++ b/internal/auth/repository/eventsourcing/eventstore/auth_request_test.go
@@ -15,13 +15,13 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/query"
user_repo "github.com/zitadel/zitadel/internal/repository/user"
user_model "github.com/zitadel/zitadel/internal/user/model"
user_es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model"
user_view_model "github.com/zitadel/zitadel/internal/user/repository/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
)
var (
@@ -38,8 +38,8 @@ func (m *mockViewNoUserSession) UserSessionsByAgentID(string, string) ([]*user_v
return nil, nil
}
-func (m *mockViewNoUserSession) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return &repository.CurrentSequence{}, nil
+func (m *mockViewNoUserSession) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*query.CurrentState, error) {
+ return &query.CurrentState{State: query.State{Sequence: 0}}, nil
}
type mockViewErrUserSession struct{}
@@ -52,8 +52,8 @@ func (m *mockViewErrUserSession) UserSessionsByAgentID(string, string) ([]*user_
return nil, errors.ThrowInternal(nil, "id", "internal error")
}
-func (m *mockViewErrUserSession) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return &repository.CurrentSequence{}, nil
+func (m *mockViewErrUserSession) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*query.CurrentState, error) {
+ return &query.CurrentState{State: query.State{Sequence: 0}}, nil
}
type mockViewUserSession struct {
@@ -95,8 +95,8 @@ func (m *mockViewUserSession) UserSessionsByAgentID(string, string) ([]*user_vie
return sessions, nil
}
-func (m *mockViewUserSession) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return &repository.CurrentSequence{}, nil
+func (m *mockViewUserSession) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*query.CurrentState, error) {
+ return &query.CurrentState{State: query.State{Sequence: 0}}, nil
}
type mockViewNoUser struct{}
@@ -106,15 +106,18 @@ func (m *mockViewNoUser) UserByID(string, string) (*user_view_model.UserView, er
}
type mockEventUser struct {
- Event *es_models.Event
+ Event eventstore.Event
}
-func (m *mockEventUser) UserEventsByID(ctx context.Context, id string, sequence uint64, types []es_models.EventType) ([]*es_models.Event, error) {
- events := make([]*es_models.Event, 0)
+func (m *mockEventUser) UserEventsByID(ctx context.Context, id string, sequence uint64, types []eventstore.EventType) ([]eventstore.Event, error) {
if m.Event != nil {
- events = append(events, m.Event)
+ return []eventstore.Event{m.Event}, nil
}
- return events, nil
+ return nil, nil
+}
+
+func (m *mockEventUser) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*query.CurrentState, error) {
+ return &query.CurrentState{State: query.State{Sequence: 0}}, nil
}
func (m *mockEventUser) BulkAddExternalIDPs(ctx context.Context, userID string, externalIDPs []*user_model.ExternalIDP) error {
@@ -123,7 +126,7 @@ func (m *mockEventUser) BulkAddExternalIDPs(ctx context.Context, userID string,
type mockEventErrUser struct{}
-func (m *mockEventErrUser) UserEventsByID(ctx context.Context, id string, sequence uint64, types []es_models.EventType) ([]*es_models.Event, error) {
+func (m *mockEventErrUser) UserEventsByID(ctx context.Context, id string, sequence uint64, types []eventstore.EventType) ([]eventstore.Event, error) {
return nil, errors.ThrowInternal(nil, "id", "internal error")
}
@@ -672,7 +675,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
userEventProvider: &mockEventUser{
&es_models.Event{
AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserDeactivatedType),
+ Typ: user_repo.UserDeactivatedType,
},
},
orgViewProvider: &mockViewOrg{State: domain.OrgStateActive},
@@ -694,7 +697,7 @@ func TestAuthRequestRepo_nextSteps(t *testing.T) {
userEventProvider: &mockEventUser{
&es_models.Event{
AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserLockedType),
+ Typ: user_repo.UserLockedType,
},
},
orgViewProvider: &mockViewOrg{State: domain.OrgStateActive},
@@ -2099,7 +2102,7 @@ func Test_userSessionByIDs(t *testing.T) {
eventProvider: &mockEventUser{
&es_models.Event{
AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserV1MFAOTPCheckSucceededType),
+ Typ: user_repo.UserV1MFAOTPCheckSucceededType,
CreationDate: testNow,
},
},
@@ -2122,7 +2125,7 @@ func Test_userSessionByIDs(t *testing.T) {
eventProvider: &mockEventUser{
&es_models.Event{
AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserV1MFAOTPCheckSucceededType),
+ Typ: user_repo.UserV1MFAOTPCheckSucceededType,
CreationDate: testNow,
Data: func() []byte {
data, _ := json.Marshal(&user_es_model.AuthRequest{UserAgentID: "otherID"})
@@ -2149,7 +2152,7 @@ func Test_userSessionByIDs(t *testing.T) {
eventProvider: &mockEventUser{
&es_models.Event{
AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserV1MFAOTPCheckSucceededType),
+ Typ: user_repo.UserV1MFAOTPCheckSucceededType,
CreationDate: testNow,
Data: func() []byte {
data, _ := json.Marshal(&user_es_model.AuthRequest{UserAgentID: "agentID"})
@@ -2176,7 +2179,7 @@ func Test_userSessionByIDs(t *testing.T) {
eventProvider: &mockEventUser{
&es_models.Event{
AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserRemovedType),
+ Typ: user_repo.UserRemovedType,
},
},
},
@@ -2243,14 +2246,7 @@ func Test_userByID(t *testing.T) {
viewProvider: &mockViewUser{
PasswordChangeRequired: true,
},
- eventProvider: &mockEventUser{
- &es_models.Event{
- AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserV1PasswordChangedType),
- CreationDate: testNow,
- Data: nil,
- },
- },
+ eventProvider: &mockEventErrUser{},
},
&user_model.UserView{
State: user_model.UserStateActive,
@@ -2272,7 +2268,7 @@ func Test_userByID(t *testing.T) {
eventProvider: &mockEventUser{
&es_models.Event{
AggregateType: user_repo.AggregateType,
- Type: es_models.EventType(user_repo.UserV1PasswordChangedType),
+ Typ: user_repo.UserV1PasswordChangedType,
CreationDate: testNow,
Data: func() []byte {
data, _ := json.Marshal(user_es_model.Password{ChangeRequired: false, Secret: &crypto.CryptoValue{}})
diff --git a/internal/auth/repository/eventsourcing/eventstore/org.go b/internal/auth/repository/eventsourcing/eventstore/org.go
index fa15bfc2cc..938f0d27cd 100644
--- a/internal/auth/repository/eventsourcing/eventstore/org.go
+++ b/internal/auth/repository/eventsourcing/eventstore/org.go
@@ -7,7 +7,7 @@ import (
auth_view "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/config/systemdefaults"
"github.com/zitadel/zitadel/internal/domain"
- eventstore "github.com/zitadel/zitadel/internal/eventstore/v1"
+ "github.com/zitadel/zitadel/internal/eventstore"
iam_model "github.com/zitadel/zitadel/internal/iam/model"
iam_view_model "github.com/zitadel/zitadel/internal/iam/repository/view/model"
"github.com/zitadel/zitadel/internal/query"
@@ -16,7 +16,7 @@ import (
type OrgRepository struct {
SearchLimit uint64
- Eventstore eventstore.Eventstore
+ Eventstore *eventstore.Eventstore
View *auth_view.View
SystemDefaults systemdefaults.SystemDefaults
Query *query.Queries
diff --git a/internal/auth/repository/eventsourcing/eventstore/refresh_token.go b/internal/auth/repository/eventsourcing/eventstore/refresh_token.go
index 7d0c1e7d78..39c5e441d3 100644
--- a/internal/auth/repository/eventsourcing/eventstore/refresh_token.go
+++ b/internal/auth/repository/eventsourcing/eventstore/refresh_token.go
@@ -11,8 +11,7 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
usr_model "github.com/zitadel/zitadel/internal/user/model"
usr_view "github.com/zitadel/zitadel/internal/user/repository/view"
@@ -20,7 +19,7 @@ import (
)
type RefreshTokenRepo struct {
- Eventstore v1.Eventstore
+ Eventstore *eventstore.Eventstore
View *view.View
SearchLimit uint64
KeyAlgorithm crypto.EncryptionAlgorithm
@@ -48,7 +47,7 @@ func (r *RefreshTokenRepo) RefreshTokenByID(ctx context.Context, tokenID, userID
return nil, viewErr
}
if errors.IsNotFound(viewErr) {
- sequence, err := r.View.GetLatestRefreshTokenSequence(ctx, instanceID)
+ sequence, err := r.View.GetLatestRefreshTokenSequence(ctx)
logging.WithFields("instanceID", instanceID, "userID", userID, "tokenID", tokenID).
OnError(err).
Errorf("could not get current sequence for RefreshTokenByID")
@@ -58,7 +57,7 @@ func (r *RefreshTokenRepo) RefreshTokenByID(ctx context.Context, tokenID, userID
tokenView.UserID = userID
tokenView.InstanceID = instanceID
if sequence != nil {
- tokenView.Sequence = sequence.CurrentSequence
+ tokenView.Sequence = sequence.Sequence
}
}
@@ -89,7 +88,7 @@ func (r *RefreshTokenRepo) SearchMyRefreshTokens(ctx context.Context, userID str
if err != nil {
return nil, err
}
- sequence, err := r.View.GetLatestRefreshTokenSequence(ctx, authz.GetInstance(ctx).InstanceID())
+ sequence, err := r.View.GetLatestRefreshTokenSequence(ctx)
logging.Log("EVENT-GBdn4").OnError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Warn("could not read latest refresh token sequence")
request.Queries = append(request.Queries, &usr_model.RefreshTokenSearchQuery{Key: usr_model.RefreshTokenSearchKeyUserID, Method: domain.SearchMethodEquals, Value: userID})
tokens, count, err := r.View.SearchRefreshTokens(request)
@@ -100,16 +99,16 @@ func (r *RefreshTokenRepo) SearchMyRefreshTokens(ctx context.Context, userID str
Offset: request.Offset,
Limit: request.Limit,
TotalResult: count,
- Sequence: sequence.CurrentSequence,
- Timestamp: sequence.LastSuccessfulSpoolerRun,
+ Sequence: sequence.Sequence,
+ Timestamp: sequence.LastRun,
Result: model.RefreshTokenViewsToModel(tokens),
}, nil
}
-func (r *RefreshTokenRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64, eventTypes []models.EventType) ([]*models.Event, error) {
+func (r *RefreshTokenRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64, eventTypes []eventstore.EventType) ([]eventstore.Event, error) {
query, err := usr_view.UserByIDQuery(userID, instanceID, sequence, eventTypes)
if err != nil {
return nil, err
}
- return r.Eventstore.FilterEvents(ctx, query)
+ return r.Eventstore.Filter(ctx, query)
}
diff --git a/internal/auth/repository/eventsourcing/eventstore/token.go b/internal/auth/repository/eventsourcing/eventstore/token.go
index 151c25e6b7..b1af743a7d 100644
--- a/internal/auth/repository/eventsourcing/eventstore/token.go
+++ b/internal/auth/repository/eventsourcing/eventstore/token.go
@@ -9,8 +9,7 @@ import (
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/errors"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
usr_model "github.com/zitadel/zitadel/internal/user/model"
usr_view "github.com/zitadel/zitadel/internal/user/repository/view"
@@ -18,21 +17,10 @@ import (
)
type TokenRepo struct {
- Eventstore v1.Eventstore
+ Eventstore *eventstore.Eventstore
View *view.View
}
-func (repo *TokenRepo) IsTokenValid(ctx context.Context, userID, tokenID string) (bool, error) {
- token, err := repo.TokenByIDs(ctx, userID, tokenID)
- if err == nil {
- return token.Expiration.After(time.Now().UTC()), nil
- }
- if errors.IsNotFound(err) {
- return false, nil
- }
- return false, err
-}
-
func (repo *TokenRepo) TokenByIDs(ctx context.Context, userID, tokenID string) (*usr_model.TokenView, error) {
instanceID := authz.GetInstance(ctx).InstanceID()
@@ -51,7 +39,7 @@ func (repo *TokenRepo) TokenByIDs(ctx context.Context, userID, tokenID string) (
token.UserID = userID
token.InstanceID = instanceID
if sequence != nil {
- token.Sequence = sequence.CurrentSequence
+ token.Sequence = sequence.Sequence
}
}
@@ -77,10 +65,10 @@ func (repo *TokenRepo) TokenByIDs(ctx context.Context, userID, tokenID string) (
return model.TokenViewToModel(token), nil
}
-func (r *TokenRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64, eventTypes []models.EventType) ([]*models.Event, error) {
+func (r *TokenRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64, eventTypes []eventstore.EventType) ([]eventstore.Event, error) {
query, err := usr_view.UserByIDQuery(userID, instanceID, sequence, eventTypes)
if err != nil {
return nil, err
}
- return r.Eventstore.FilterEvents(ctx, query)
+ return r.Eventstore.Filter(ctx, query)
}
diff --git a/internal/auth/repository/eventsourcing/eventstore/user.go b/internal/auth/repository/eventsourcing/eventstore/user.go
index cebf0d4744..288527dcef 100644
--- a/internal/auth/repository/eventsourcing/eventstore/user.go
+++ b/internal/auth/repository/eventsourcing/eventstore/user.go
@@ -7,15 +7,14 @@ import (
"github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/config/systemdefaults"
"github.com/zitadel/zitadel/internal/domain"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/query"
usr_view "github.com/zitadel/zitadel/internal/user/repository/view"
)
type UserRepo struct {
SearchLimit uint64
- Eventstore v1.Eventstore
+ Eventstore *eventstore.Eventstore
View *view.View
Query *query.Queries
SystemDefaults systemdefaults.SystemDefaults
@@ -39,14 +38,14 @@ func (repo *UserRepo) UserSessionUserIDsByAgentID(ctx context.Context, agentID s
return userIDs, nil
}
-func (repo *UserRepo) UserEventsByID(ctx context.Context, id string, sequence uint64, eventTypes []models.EventType) ([]*models.Event, error) {
+func (repo *UserRepo) UserEventsByID(ctx context.Context, id string, sequence uint64, eventTypes []eventstore.EventType) ([]eventstore.Event, error) {
return repo.getUserEvents(ctx, id, sequence, eventTypes)
}
-func (r *UserRepo) getUserEvents(ctx context.Context, userID string, sequence uint64, eventTypes []models.EventType) ([]*models.Event, error) {
+func (r *UserRepo) getUserEvents(ctx context.Context, userID string, sequence uint64, eventTypes []eventstore.EventType) ([]eventstore.Event, error) {
query, err := usr_view.UserByIDQuery(userID, authz.GetInstance(ctx).InstanceID(), sequence, eventTypes)
if err != nil {
return nil, err
}
- return r.Eventstore.FilterEvents(ctx, query)
+ return r.Eventstore.Filter(ctx, query)
}
diff --git a/internal/auth/repository/eventsourcing/handler/handler.go b/internal/auth/repository/eventsourcing/handler/handler.go
index 3f0baecdba..e9a468785a 100644
--- a/internal/auth/repository/eventsourcing/handler/handler.go
+++ b/internal/auth/repository/eventsourcing/handler/handler.go
@@ -4,84 +4,68 @@ import (
"context"
"time"
- "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
+ "github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
+ handler2 "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
query2 "github.com/zitadel/zitadel/internal/query"
- "github.com/zitadel/zitadel/internal/view/repository"
)
-type Configs map[string]*Config
-
type Config struct {
+ Client *database.DB
+ Eventstore *eventstore.Eventstore
+
+ BulkLimit uint64
+ FailureCountUntilSkip uint64
+ HandleActiveInstances time.Duration
+ TransactionDuration time.Duration
+ Handlers map[string]*ConfigOverwrites
+}
+
+type ConfigOverwrites struct {
MinimumCycleDuration time.Duration
}
-type handler struct {
- view *view.View
- bulkLimit uint64
- cycleDuration time.Duration
- errorCountUntilSkip uint64
+func Register(ctx context.Context, configs Config, view *view.View, queries *query2.Queries) {
+ newUser(ctx,
+ configs.overwrite("User"),
+ view,
+ queries,
+ ).Start(ctx)
- es v1.Eventstore
+ newUserSession(ctx,
+ configs.overwrite("UserSession"),
+ view,
+ queries,
+ ).Start(ctx)
+
+ newToken(ctx,
+ configs.overwrite("Token"),
+ view,
+ ).Start(ctx)
+
+ newRefreshToken(ctx,
+ configs.overwrite("RefreshToken"),
+ view,
+ ).Start(ctx)
}
-func (h *handler) Eventstore() v1.Eventstore {
- return h.es
-}
-
-func Register(ctx context.Context, configs Configs, bulkLimit, errorCount uint64, view *view.View, es v1.Eventstore, queries *query2.Queries) []query.Handler {
- return []query.Handler{
- newUser(ctx,
- handler{view, bulkLimit, configs.cycleDuration("User"), errorCount, es}, queries),
- newUserSession(ctx,
- handler{view, bulkLimit, configs.cycleDuration("UserSession"), errorCount, es}, queries),
- newToken(ctx,
- handler{view, bulkLimit, configs.cycleDuration("Token"), errorCount, es}),
- newRefreshToken(ctx, handler{view, bulkLimit, configs.cycleDuration("RefreshToken"), errorCount, es}),
+func (config Config) overwrite(viewModel string) handler2.Config {
+ c := handler2.Config{
+ Client: config.Client,
+ Eventstore: config.Eventstore,
+ BulkLimit: uint16(config.BulkLimit),
+ RequeueEvery: 3 * time.Minute,
+ HandleActiveInstances: config.HandleActiveInstances,
+ MaxFailureCount: uint8(config.FailureCountUntilSkip),
+ TransactionDuration: config.TransactionDuration,
}
-}
-
-func (configs Configs) cycleDuration(viewModel string) time.Duration {
- c, ok := configs[viewModel]
+ overwrite, ok := config.Handlers[viewModel]
if !ok {
- return 3 * time.Minute
+ return c
}
- return c.MinimumCycleDuration
-}
-
-func (h *handler) MinimumCycleDuration() time.Duration {
- return h.cycleDuration
-}
-
-func (h *handler) LockDuration() time.Duration {
- return h.cycleDuration / 3
-}
-
-func (h *handler) QueryLimit() uint64 {
- return h.bulkLimit
-}
-
-func withInstanceID(ctx context.Context, instanceID string) context.Context {
- return authz.WithInstanceID(ctx, instanceID)
-}
-
-func newSearchQuery(sequences []*repository.CurrentSequence, aggregateTypes []models.AggregateType, instanceIDs []string) *models.SearchQuery {
- searchQuery := models.NewSearchQuery()
- for _, instanceID := range instanceIDs {
- var seq uint64
- for _, sequence := range sequences {
- if sequence.InstanceID == instanceID {
- seq = sequence.CurrentSequence
- break
- }
- }
- searchQuery.AddQuery().
- AggregateTypeFilter(aggregateTypes...).
- LatestSequenceFilter(seq).
- InstanceIDFilter(instanceID)
+ if overwrite.MinimumCycleDuration > 0 {
+ c.RequeueEvery = overwrite.MinimumCycleDuration
}
- return searchQuery
+ return c
}
diff --git a/internal/auth/repository/eventsourcing/handler/refresh_token.go b/internal/auth/repository/eventsourcing/handler/refresh_token.go
index 51f158b681..5a1b59d492 100644
--- a/internal/auth/repository/eventsourcing/handler/refresh_token.go
+++ b/internal/auth/repository/eventsourcing/handler/refresh_token.go
@@ -2,19 +2,15 @@ package handler
import (
"context"
- "encoding/json"
"github.com/zitadel/logging"
+ auth_view "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
- "github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
view_model "github.com/zitadel/zitadel/internal/user/repository/view/model"
)
@@ -23,110 +19,129 @@ const (
refreshTokenTable = "auth.refresh_tokens"
)
+var _ handler.Projection = (*RefreshToken)(nil)
+
type RefreshToken struct {
- handler
- subscription *v1.Subscription
+ view *auth_view.View
}
func newRefreshToken(
ctx context.Context,
- handler handler,
-) *RefreshToken {
- h := &RefreshToken{
- handler: handler,
- }
-
- h.subscribe(ctx)
-
- return h
+ config handler.Config,
+ view *auth_view.View,
+) *handler.Handler {
+ return handler.NewHandler(
+ ctx,
+ &config,
+ &RefreshToken{
+ view: view,
+ },
+ )
}
-func (t *RefreshToken) subscribe(ctx context.Context) {
- t.subscription = t.es.Subscribe(t.AggregateTypes()...)
- go func() {
- for event := range t.subscription.Events {
- query.ReduceEvent(ctx, t, event)
- }
- }()
-}
-
-func (t *RefreshToken) ViewModel() string {
+// Name implements [handler.Projection]
+func (*RefreshToken) Name() string {
return refreshTokenTable
}
-func (t *RefreshToken) Subscription() *v1.Subscription {
- return t.subscription
-}
-
-func (t *RefreshToken) AggregateTypes() []es_models.AggregateType {
- return []es_models.AggregateType{user.AggregateType, project.AggregateType, instance.AggregateType}
-}
-
-func (t *RefreshToken) CurrentSequence(ctx context.Context, instanceID string) (uint64, error) {
- sequence, err := t.view.GetLatestRefreshTokenSequence(ctx, instanceID)
- if err != nil {
- return 0, err
- }
- return sequence.CurrentSequence, nil
-}
-
-func (t *RefreshToken) EventQuery(ctx context.Context, instanceIDs []string) (*es_models.SearchQuery, error) {
- sequences, err := t.view.GetLatestRefreshTokenSequences(ctx, instanceIDs)
- if err != nil {
- return nil, err
- }
- return newSearchQuery(sequences, t.AggregateTypes(), instanceIDs), nil
-}
-
-func (t *RefreshToken) Reduce(event *es_models.Event) (err error) {
- switch eventstore.EventType(event.Type) {
- case user.HumanRefreshTokenAddedType:
- token := new(view_model.RefreshTokenView)
- err := token.AppendEvent(event)
- if err != nil {
- return err
- }
- return t.view.PutRefreshToken(token, event)
- case user.HumanRefreshTokenRenewedType:
- e := new(user.HumanRefreshTokenRenewedEvent)
- if err := json.Unmarshal(event.Data, e); err != nil {
- logging.WithError(err).Error("could not unmarshal event data")
- return caos_errs.ThrowInternal(nil, "MODEL-BHn75", "could not unmarshal data")
- }
- token, err := t.view.RefreshTokenByID(e.TokenID, event.InstanceID)
- if err != nil {
- return err
- }
- err = token.AppendEvent(event)
- if err != nil {
- return err
- }
- return t.view.PutRefreshToken(token, event)
- case user.HumanRefreshTokenRemovedType:
- e := new(user.HumanRefreshTokenRemovedEvent)
- if err := json.Unmarshal(event.Data, e); err != nil {
- logging.WithError(err).Error("could not unmarshal event data")
- return caos_errs.ThrowInternal(nil, "MODEL-Bz653", "could not unmarshal data")
- }
- return t.view.DeleteRefreshToken(e.TokenID, event.InstanceID, event)
- case user.UserLockedType,
- user.UserDeactivatedType,
- user.UserRemovedType:
- return t.view.DeleteUserRefreshTokens(event.AggregateID, event.InstanceID, event)
- case instance.InstanceRemovedEventType:
- return t.view.DeleteInstanceRefreshTokens(event)
- case org.OrgRemovedEventType:
- return t.view.DeleteOrgRefreshTokens(event)
- default:
- return t.view.ProcessedRefreshTokenSequence(event)
+// Reducers implements [handler.Projection]
+func (t *RefreshToken) Reducers() []handler.AggregateReducer {
+ return []handler.AggregateReducer{
+ {
+ Aggregate: user.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: user.HumanRefreshTokenAddedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.HumanRefreshTokenRenewedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.HumanRefreshTokenRemovedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserLockedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserDeactivatedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserRemovedType,
+ Reduce: t.Reduce,
+ },
+ },
+ },
+ {
+ Aggregate: instance.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: instance.InstanceRemovedEventType,
+ Reduce: t.Reduce,
+ },
+ },
+ },
+ {
+ Aggregate: org.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: org.OrgRemovedEventType,
+ Reduce: t.Reduce,
+ },
+ },
+ },
}
}
-func (t *RefreshToken) OnError(event *es_models.Event, err error) error {
- logging.WithFields("id", event.AggregateID).WithError(err).Warn("something went wrong in token handler")
- return spooler.HandleError(event, err, t.view.GetLatestRefreshTokenFailedEvent, t.view.ProcessedRefreshTokenFailedEvent, t.view.ProcessedRefreshTokenSequence, t.errorCountUntilSkip)
-}
+func (t *RefreshToken) Reduce(event eventstore.Event) (_ *handler.Statement, err error) {
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ switch event.Type() {
+ case user.HumanRefreshTokenAddedType:
+ token := new(view_model.RefreshTokenView)
+ err := token.AppendEvent(event)
+ if err != nil {
+ return err
+ }
-func (t *RefreshToken) OnSuccess(instanceIDs []string) error {
- return spooler.HandleSuccess(t.view.UpdateRefreshTokenSpoolerRunTimestamp, instanceIDs)
+ return t.view.PutRefreshToken(token)
+ case user.HumanRefreshTokenRenewedType:
+ e := new(user.HumanRefreshTokenRenewedEvent)
+ if err := event.Unmarshal(e); err != nil {
+ logging.WithError(err).Error("could not unmarshal event data")
+ return caos_errs.ThrowInternal(nil, "MODEL-BHn75", "could not unmarshal data")
+ }
+ token, err := t.view.RefreshTokenByID(e.TokenID, event.Aggregate().InstanceID)
+ if err != nil {
+ return err
+ }
+ err = token.AppendEvent(event)
+ if err != nil {
+ return err
+ }
+ return t.view.PutRefreshToken(token)
+ case user.HumanRefreshTokenRemovedType:
+ e := new(user.HumanRefreshTokenRemovedEvent)
+ if err := event.Unmarshal(e); err != nil {
+ logging.WithError(err).Error("could not unmarshal event data")
+ return caos_errs.ThrowInternal(nil, "MODEL-Bz653", "could not unmarshal data")
+ }
+ return t.view.DeleteRefreshToken(e.TokenID, event.Aggregate().InstanceID)
+ case user.UserLockedType,
+ user.UserDeactivatedType,
+ user.UserRemovedType:
+
+ return t.view.DeleteUserRefreshTokens(event.Aggregate().ID, event.Aggregate().InstanceID)
+ case instance.InstanceRemovedEventType:
+
+ return t.view.DeleteInstanceRefreshTokens(event.Aggregate().InstanceID)
+ case org.OrgRemovedEventType:
+ return t.view.DeleteOrgRefreshTokens(event)
+ default:
+ return nil
+ }
+ }), nil
}
diff --git a/internal/auth/repository/eventsourcing/handler/token.go b/internal/auth/repository/eventsourcing/handler/token.go
index 7bb5bd321b..04cc19f50f 100644
--- a/internal/auth/repository/eventsourcing/handler/token.go
+++ b/internal/auth/repository/eventsourcing/handler/token.go
@@ -2,17 +2,14 @@ package handler
import (
"context"
- "encoding/json"
"github.com/zitadel/logging"
+ auth_view "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- es_sdk "github.com/zitadel/zitadel/internal/eventstore/v1/sdk"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
proj_model "github.com/zitadel/zitadel/internal/project/model"
project_es_model "github.com/zitadel/zitadel/internal/project/repository/eventsourcing/model"
proj_view "github.com/zitadel/zitadel/internal/project/repository/view"
@@ -20,7 +17,6 @@ import (
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
- user_repo "github.com/zitadel/zitadel/internal/repository/user"
view_model "github.com/zitadel/zitadel/internal/user/repository/view/model"
)
@@ -28,189 +24,258 @@ const (
tokenTable = "auth.tokens"
)
+var _ handler.Projection = (*Token)(nil)
+
type Token struct {
- handler
- subscription *v1.Subscription
+ view *auth_view.View
+ es handler.EventStore
}
func newToken(
ctx context.Context,
- handler handler,
-) *Token {
- h := &Token{
- handler: handler,
- }
-
- h.subscribe(ctx)
-
- return h
+ config handler.Config,
+ view *auth_view.View,
+) *handler.Handler {
+ return handler.NewHandler(
+ ctx,
+ &config,
+ &Token{
+ view: view,
+ es: config.Eventstore,
+ },
+ )
}
-func (t *Token) subscribe(ctx context.Context) {
- t.subscription = t.es.Subscribe(t.AggregateTypes()...)
- go func() {
- for event := range t.subscription.Events {
- query.ReduceEvent(ctx, t, event)
- }
- }()
-}
-
-func (t *Token) ViewModel() string {
+// Name implements [handler.Projection]
+func (*Token) Name() string {
return tokenTable
}
-func (t *Token) Subscription() *v1.Subscription {
- return t.subscription
-}
-
-func (_ *Token) AggregateTypes() []es_models.AggregateType {
- return []es_models.AggregateType{user.AggregateType, project.AggregateType, instance.AggregateType}
-}
-
-func (t *Token) CurrentSequence(ctx context.Context, instanceID string) (uint64, error) {
- sequence, err := t.view.GetLatestTokenSequence(ctx, instanceID)
- if err != nil {
- return 0, err
+// Reducers implements [handler.Projection]
+func (t *Token) Reducers() []handler.AggregateReducer {
+ return []handler.AggregateReducer{
+ {
+ Aggregate: user.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: user.PersonalAccessTokenAddedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserTokenAddedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserV1ProfileChangedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.HumanProfileChangedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserV1SignedOutType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.HumanSignedOutType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserLockedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserDeactivatedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserRemovedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.UserTokenRemovedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.PersonalAccessTokenRemovedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: user.HumanRefreshTokenRemovedType,
+ Reduce: t.Reduce,
+ },
+ },
+ },
+ {
+ Aggregate: project.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: project.ApplicationDeactivatedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: project.ApplicationRemovedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: project.ProjectDeactivatedType,
+ Reduce: t.Reduce,
+ },
+ {
+ Event: project.ProjectRemovedType,
+ Reduce: t.Reduce,
+ },
+ },
+ },
+ {
+ Aggregate: org.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: org.OrgRemovedEventType,
+ Reduce: t.Reduce,
+ },
+ },
+ },
+ {
+ Aggregate: instance.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: instance.InstanceRemovedEventType,
+ Reduce: t.Reduce,
+ },
+ },
+ },
}
- return sequence.CurrentSequence, nil
}
-func (t *Token) EventQuery(ctx context.Context, instanceIDs []string) (*es_models.SearchQuery, error) {
- sequences, err := t.view.GetLatestTokenSequences(ctx, instanceIDs)
- if err != nil {
- return nil, err
- }
- return newSearchQuery(sequences, t.AggregateTypes(), instanceIDs), nil
-}
-
-func (t *Token) Reduce(event *es_models.Event) (err error) {
- switch eventstore.EventType(event.Type) {
- case user.UserTokenAddedType,
- user_repo.PersonalAccessTokenAddedType:
- token := new(view_model.TokenView)
- err := token.AppendEvent(event)
- if err != nil {
- return err
- }
- return t.view.PutToken(token, event)
- case user.UserV1ProfileChangedType,
- user.HumanProfileChangedType:
- user := new(view_model.UserView)
- err := user.AppendEvent(event)
- if err != nil {
- return err
- }
- tokens, err := t.view.TokensByUserID(event.AggregateID, event.InstanceID)
- if err != nil {
- return err
- }
- for _, token := range tokens {
- token.PreferredLanguage = user.PreferredLanguage
- }
- return t.view.PutTokens(tokens, event)
- case user.UserV1SignedOutType,
- user.HumanSignedOutType:
- id, err := agentIDFromSession(event)
- if err != nil {
- return err
- }
- return t.view.DeleteSessionTokens(id, event.AggregateID, event.InstanceID, event)
- case user.UserLockedType,
- user.UserDeactivatedType,
- user.UserRemovedType:
- return t.view.DeleteUserTokens(event.AggregateID, event.InstanceID, event)
- case user_repo.UserTokenRemovedType,
- user_repo.PersonalAccessTokenRemovedType:
- id, err := tokenIDFromRemovedEvent(event)
- if err != nil {
- return err
- }
- return t.view.DeleteToken(id, event.InstanceID, event)
- case user_repo.HumanRefreshTokenRemovedType:
- id, err := refreshTokenIDFromRemovedEvent(event)
- if err != nil {
- return err
- }
- return t.view.DeleteTokensFromRefreshToken(id, event.InstanceID, event)
- case project.ApplicationDeactivatedType,
- project.ApplicationRemovedType:
- application, err := applicationFromSession(event)
- if err != nil {
- return err
- }
- return t.view.DeleteApplicationTokens(event, application.AppID)
- case project.ProjectDeactivatedType,
- project.ProjectRemovedType:
- project, err := t.getProjectByID(context.Background(), event.AggregateID, event.InstanceID)
- if err != nil {
- return err
- }
- clientIDs := make([]string, 0, len(project.Applications))
- for _, app := range project.Applications {
- if app.OIDCConfig != nil {
- clientIDs = append(clientIDs, app.OIDCConfig.ClientID)
+func (t *Token) Reduce(event eventstore.Event) (_ *handler.Statement, err error) { //nolint:gocognit
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ switch event.Type() {
+ case user.UserTokenAddedType,
+ user.PersonalAccessTokenAddedType:
+ token := new(view_model.TokenView)
+ err := token.AppendEvent(event)
+ if err != nil {
+ return err
}
+ return t.view.PutToken(token)
+ case user.UserV1ProfileChangedType,
+ user.HumanProfileChangedType:
+ user := new(view_model.UserView)
+ err := user.AppendEvent(event)
+ if err != nil {
+ return err
+ }
+ tokens, err := t.view.TokensByUserID(event.Aggregate().ID, event.Aggregate().InstanceID)
+ if err != nil {
+ return err
+ }
+ for _, token := range tokens {
+ token.PreferredLanguage = user.PreferredLanguage
+ }
+ return t.view.PutTokens(tokens)
+ case user.UserV1SignedOutType,
+ user.HumanSignedOutType:
+ id, err := agentIDFromSession(event)
+ if err != nil {
+ return err
+ }
+
+ return t.view.DeleteSessionTokens(id, event)
+ case user.UserLockedType,
+ user.UserDeactivatedType,
+ user.UserRemovedType:
+
+ return t.view.DeleteUserTokens(event)
+ case user.UserTokenRemovedType,
+ user.PersonalAccessTokenRemovedType:
+ id, err := tokenIDFromRemovedEvent(event)
+ if err != nil {
+ return err
+ }
+
+ return t.view.DeleteToken(id, event.Aggregate().InstanceID)
+ case user.HumanRefreshTokenRemovedType:
+ id, err := refreshTokenIDFromRemovedEvent(event)
+ if err != nil {
+ return err
+ }
+
+ return t.view.DeleteTokensFromRefreshToken(id, event.Aggregate().InstanceID)
+ case project.ApplicationDeactivatedType,
+ project.ApplicationRemovedType:
+ application, err := applicationFromSession(event)
+ if err != nil {
+ return err
+ }
+
+ return t.view.DeleteApplicationTokens(event, application.AppID)
+ case project.ProjectDeactivatedType,
+ project.ProjectRemovedType:
+ project, err := t.getProjectByID(context.Background(), event.Aggregate().ID, event.Aggregate().InstanceID)
+ if err != nil {
+ return err
+ }
+ applicationIDs := make([]string, 0, len(project.Applications))
+ for _, app := range project.Applications {
+ if app.OIDCConfig != nil {
+ applicationIDs = append(applicationIDs, app.OIDCConfig.ClientID)
+ }
+ }
+
+ return t.view.DeleteApplicationTokens(event, applicationIDs...)
+ case instance.InstanceRemovedEventType:
+ return t.view.DeleteInstanceTokens(event)
+ case org.OrgRemovedEventType:
+ // deletes all tokens including PATs, which is expected for now
+ // if there is an undo of the org deletion in the future,
+ // we will need to have a look on how to handle the deleted PATs
+ return t.view.DeleteOrgTokens(event)
+ default:
+ return nil
}
- return t.view.DeleteApplicationTokens(event, clientIDs...)
- case instance.InstanceRemovedEventType:
- return t.view.DeleteInstanceTokens(event)
- case org.OrgRemovedEventType:
- // deletes all tokens including PATs, which is expected for now
- // if there is an undo of the org deletion in the future,
- // we will need to have a look on how to handle the deleted PATs
- return t.view.DeleteOrgTokens(event)
- default:
- return t.view.ProcessedTokenSequence(event)
- }
+ }), nil
}
-func (t *Token) OnError(event *es_models.Event, err error) error {
- logging.WithFields("id", event.AggregateID).WithError(err).Warn("something went wrong in token handler")
- return spooler.HandleError(event, err, t.view.GetLatestTokenFailedEvent, t.view.ProcessedTokenFailedEvent, t.view.ProcessedTokenSequence, t.errorCountUntilSkip)
-}
-
-func agentIDFromSession(event *es_models.Event) (string, error) {
+func agentIDFromSession(event eventstore.Event) (string, error) {
session := make(map[string]interface{})
- if err := json.Unmarshal(event.Data, &session); err != nil {
+ if err := event.Unmarshal(&session); err != nil {
logging.WithError(err).Error("could not unmarshal event data")
return "", caos_errs.ThrowInternal(nil, "MODEL-sd325", "could not unmarshal data")
}
return session["userAgentID"].(string), nil
}
-func applicationFromSession(event *es_models.Event) (*project_es_model.Application, error) {
+func applicationFromSession(event eventstore.Event) (*project_es_model.Application, error) {
application := new(project_es_model.Application)
- if err := json.Unmarshal(event.Data, &application); err != nil {
+ if err := event.Unmarshal(application); err != nil {
logging.WithError(err).Error("could not unmarshal event data")
return nil, caos_errs.ThrowInternal(nil, "MODEL-Hrw1q", "could not unmarshal data")
}
return application, nil
}
-func tokenIDFromRemovedEvent(event *es_models.Event) (string, error) {
+func tokenIDFromRemovedEvent(event eventstore.Event) (string, error) {
removed := make(map[string]interface{})
- if err := json.Unmarshal(event.Data, &removed); err != nil {
+ if err := event.Unmarshal(&removed); err != nil {
logging.WithError(err).Error("could not unmarshal event data")
return "", caos_errs.ThrowInternal(nil, "MODEL-Sff32", "could not unmarshal data")
}
return removed["tokenId"].(string), nil
}
-func refreshTokenIDFromRemovedEvent(event *es_models.Event) (string, error) {
+func refreshTokenIDFromRemovedEvent(event eventstore.Event) (string, error) {
removed := make(map[string]interface{})
- if err := json.Unmarshal(event.Data, &removed); err != nil {
+ if err := event.Unmarshal(&removed); err != nil {
logging.WithError(err).Error("could not unmarshal event data")
return "", caos_errs.ThrowInternal(nil, "MODEL-Dfb3w", "could not unmarshal data")
}
return removed["tokenId"].(string), nil
}
-func (t *Token) OnSuccess(instanceIDs []string) error {
- return spooler.HandleSuccess(t.view.UpdateTokenSpoolerRunTimestamp, instanceIDs)
-}
-
func (t *Token) getProjectByID(ctx context.Context, projID, instanceID string) (*proj_model.Project, error) {
- projectQuery, err := proj_view.ProjectByIDQuery(projID, instanceID, 0)
+ query, err := proj_view.ProjectByIDQuery(projID, instanceID, 0)
if err != nil {
return nil, err
}
@@ -219,13 +284,16 @@ func (t *Token) getProjectByID(ctx context.Context, projID, instanceID string) (
AggregateID: projID,
},
}
- err = es_sdk.Filter(ctx, t.Eventstore().FilterEvents, esProject.AppendEvents, projectQuery)
- if err != nil && !caos_errs.IsNotFound(err) {
+ events, err := t.es.Filter(ctx, query)
+ if err != nil {
return nil, err
}
+ if err = esProject.AppendEvents(events...); err != nil {
+ return nil, err
+ }
+
if esProject.Sequence == 0 {
return nil, caos_errs.ThrowNotFound(nil, "EVENT-Dsdw2", "Errors.Project.NotFound")
}
-
return project_es_model.ProjectToModel(esProject), nil
}
diff --git a/internal/auth/repository/eventsourcing/handler/user.go b/internal/auth/repository/eventsourcing/handler/user.go
index 4224a0ca6c..09dfe6f96a 100644
--- a/internal/auth/repository/eventsourcing/handler/user.go
+++ b/internal/auth/repository/eventsourcing/handler/user.go
@@ -3,18 +3,15 @@ package handler
import (
"context"
- "github.com/zitadel/logging"
-
+ "github.com/zitadel/zitadel/internal/api/authz"
+ auth_view "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- es_sdk "github.com/zitadel/zitadel/internal/eventstore/v1/sdk"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
org_model "github.com/zitadel/zitadel/internal/org/model"
org_es_model "github.com/zitadel/zitadel/internal/org/repository/eventsourcing/model"
- "github.com/zitadel/zitadel/internal/org/repository/view"
+ org_view "github.com/zitadel/zitadel/internal/org/repository/view"
query2 "github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -28,202 +25,405 @@ const (
)
type User struct {
- handler
- subscription *v1.Subscription
- queries *query2.Queries
+ view *auth_view.View
+ queries *query2.Queries
+ es handler.EventStore
}
+var _ handler.Projection = (*User)(nil)
+
func newUser(
ctx context.Context,
- handler handler,
+ config handler.Config,
+ view *auth_view.View,
queries *query2.Queries,
-) *User {
- h := &User{
- handler: handler,
- queries: queries,
- }
-
- h.subscribe(ctx)
-
- return h
+) *handler.Handler {
+ return handler.NewHandler(
+ ctx,
+ &config,
+ &User{
+ view: view,
+ queries: queries,
+ es: config.Eventstore,
+ },
+ )
}
-func (u *User) subscribe(ctx context.Context) {
- u.subscription = u.es.Subscribe(u.AggregateTypes()...)
- go func() {
- for event := range u.subscription.Events {
- query.ReduceEvent(ctx, u, event)
- }
- }()
-}
-
-func (u *User) ViewModel() string {
+func (*User) Name() string {
return userTable
}
-
-func (u *User) Subscription() *v1.Subscription {
- return u.subscription
-}
-func (_ *User) AggregateTypes() []es_models.AggregateType {
- return []es_models.AggregateType{user_repo.AggregateType, org.AggregateType, instance.AggregateType}
-}
-
-func (u *User) CurrentSequence(ctx context.Context, instanceID string) (uint64, error) {
- sequence, err := u.view.GetLatestUserSequence(ctx, instanceID)
- if err != nil {
- return 0, err
- }
- return sequence.CurrentSequence, nil
-}
-
-func (u *User) EventQuery(ctx context.Context, instanceIDs []string) (*es_models.SearchQuery, error) {
- sequences, err := u.view.GetLatestUserSequences(ctx, instanceIDs)
- if err != nil {
- return nil, err
- }
- return newSearchQuery(sequences, u.AggregateTypes(), instanceIDs), nil
-}
-
-func (u *User) Reduce(event *es_models.Event) (err error) {
- switch event.AggregateType {
- case user_repo.AggregateType:
- return u.ProcessUser(event)
- case org.AggregateType:
- return u.ProcessOrg(event)
- case instance.AggregateType:
- return u.ProcessInstance(event)
- default:
- return nil
+func (u *User) Reducers() []handler.AggregateReducer {
+ return []handler.AggregateReducer{
+ {
+ Aggregate: user_repo.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: user_repo.HumanOTPSMSAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanOTPSMSRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanOTPEmailAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanOTPEmailRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.MachineAddedEventType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1AddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1RegisteredType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanRegisteredType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1ProfileChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1EmailChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1EmailVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1PhoneChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1PhoneVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1PhoneRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1AddressChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserDeactivatedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserReactivatedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserLockedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserUnlockedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1MFAOTPAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1MFAOTPVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1MFAOTPRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1MFAInitSkippedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1PasswordChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanProfileChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanEmailChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanEmailVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanAvatarAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanAvatarRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPhoneChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPhoneVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPhoneRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanAddressChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanMFAOTPAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanMFAOTPVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanMFAOTPRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanU2FTokenAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanU2FTokenVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanU2FTokenRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPasswordlessTokenAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPasswordlessTokenVerifiedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPasswordlessTokenRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanMFAInitSkippedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.MachineChangedEventType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPasswordChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanInitialCodeAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1InitialCodeAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserV1InitializedCheckSucceededType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanInitializedCheckSucceededType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPasswordlessInitCodeAddedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.HumanPasswordlessInitCodeRequestedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserDomainClaimedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserUserNameChangedType,
+ Reduce: u.ProcessUser,
+ },
+ {
+ Event: user_repo.UserRemovedType,
+ Reduce: u.ProcessUser,
+ },
+ },
+ },
+ {
+ Aggregate: org.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: org.OrgDomainVerifiedEventType,
+ Reduce: u.ProcessOrg,
+ },
+ {
+ Event: org.OrgDomainRemovedEventType,
+ Reduce: u.ProcessOrg,
+ },
+ {
+ Event: org.DomainPolicyAddedEventType,
+ Reduce: u.ProcessOrg,
+ },
+ {
+ Event: org.DomainPolicyChangedEventType,
+ Reduce: u.ProcessOrg,
+ },
+ {
+ Event: org.DomainPolicyRemovedEventType,
+ Reduce: u.ProcessOrg,
+ },
+ {
+ Event: org.OrgDomainPrimarySetEventType,
+ Reduce: u.ProcessOrg,
+ },
+ {
+ Event: org.OrgRemovedEventType,
+ Reduce: u.ProcessOrg,
+ },
+ },
+ },
+ {
+ Aggregate: instance.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: instance.InstanceRemovedEventType,
+ Reduce: u.ProcessInstance,
+ },
+ },
+ },
}
}
-func (u *User) ProcessUser(event *es_models.Event) (err error) {
- user := new(view_model.UserView)
- switch eventstore.EventType(event.Type) {
- case user_repo.UserV1AddedType,
- user_repo.MachineAddedEventType,
- user_repo.HumanAddedType,
- user_repo.UserV1RegisteredType,
- user_repo.HumanRegisteredType:
- err = user.AppendEvent(event)
- if err != nil {
- return err
- }
- err = u.fillLoginNames(user)
- case user_repo.UserV1ProfileChangedType,
- user_repo.UserV1EmailChangedType,
- user_repo.UserV1EmailVerifiedType,
- user_repo.UserV1PhoneChangedType,
- user_repo.UserV1PhoneVerifiedType,
- user_repo.UserV1PhoneRemovedType,
- user_repo.UserV1AddressChangedType,
- user_repo.UserDeactivatedType,
- user_repo.UserReactivatedType,
- user_repo.UserLockedType,
- user_repo.UserUnlockedType,
- user_repo.UserV1MFAOTPAddedType,
- user_repo.UserV1MFAOTPVerifiedType,
- user_repo.UserV1MFAOTPRemovedType,
- user_repo.UserV1MFAInitSkippedType,
- user_repo.UserV1PasswordChangedType,
- user_repo.HumanProfileChangedType,
- user_repo.HumanEmailChangedType,
- user_repo.HumanEmailVerifiedType,
- user_repo.HumanAvatarAddedType,
- user_repo.HumanAvatarRemovedType,
- user_repo.HumanPhoneChangedType,
- user_repo.HumanPhoneVerifiedType,
- user_repo.HumanPhoneRemovedType,
- user_repo.HumanAddressChangedType,
- user_repo.HumanMFAOTPAddedType,
- user_repo.HumanMFAOTPVerifiedType,
- user_repo.HumanMFAOTPRemovedType,
- user_repo.HumanOTPSMSAddedType,
- user_repo.HumanOTPSMSRemovedType,
- user_repo.HumanOTPEmailAddedType,
- user_repo.HumanOTPEmailRemovedType,
- user_repo.HumanU2FTokenAddedType,
- user_repo.HumanU2FTokenVerifiedType,
- user_repo.HumanU2FTokenRemovedType,
- user_repo.HumanPasswordlessTokenAddedType,
- user_repo.HumanPasswordlessTokenVerifiedType,
- user_repo.HumanPasswordlessTokenRemovedType,
- user_repo.HumanMFAInitSkippedType,
- user_repo.MachineChangedEventType,
- user_repo.HumanPasswordChangedType,
- user_repo.HumanInitialCodeAddedType,
- user_repo.UserV1InitialCodeAddedType,
- user_repo.UserV1InitializedCheckSucceededType,
- user_repo.HumanInitializedCheckSucceededType,
- user_repo.HumanPasswordlessInitCodeAddedType,
- user_repo.HumanPasswordlessInitCodeRequestedType:
- user, err = u.view.UserByID(event.AggregateID, event.InstanceID)
- if err != nil {
- if !errors.IsNotFound(err) {
- return err
- }
- logging.WithFields(
- "instance", event.InstanceID,
- "userID", event.AggregateID,
- "eventType", event.Type,
- ).Info("user not found in view")
- query, err := usr_view.UserByIDQuery(event.AggregateID, event.InstanceID, 0, user.EventTypes())
+//nolint:gocognit
+func (u *User) ProcessUser(event eventstore.Event) (_ *handler.Statement, err error) {
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ user := new(view_model.UserView)
+ switch event.Type() {
+ case user_repo.UserV1AddedType,
+ user_repo.MachineAddedEventType,
+ user_repo.HumanAddedType,
+ user_repo.UserV1RegisteredType,
+ user_repo.HumanRegisteredType:
+ err = user.AppendEvent(event)
if err != nil {
return err
}
- events, err := u.es.FilterEvents(context.Background(), query)
+ err = u.fillLoginNames(user)
+ case user_repo.UserV1ProfileChangedType,
+ user_repo.UserV1EmailChangedType,
+ user_repo.UserV1EmailVerifiedType,
+ user_repo.UserV1PhoneChangedType,
+ user_repo.UserV1PhoneVerifiedType,
+ user_repo.UserV1PhoneRemovedType,
+ user_repo.UserV1AddressChangedType,
+ user_repo.UserDeactivatedType,
+ user_repo.UserReactivatedType,
+ user_repo.UserLockedType,
+ user_repo.UserUnlockedType,
+ user_repo.UserV1MFAOTPAddedType,
+ user_repo.UserV1MFAOTPVerifiedType,
+ user_repo.UserV1MFAOTPRemovedType,
+ user_repo.UserV1MFAInitSkippedType,
+ user_repo.UserV1PasswordChangedType,
+ user_repo.HumanProfileChangedType,
+ user_repo.HumanEmailChangedType,
+ user_repo.HumanEmailVerifiedType,
+ user_repo.HumanAvatarAddedType,
+ user_repo.HumanAvatarRemovedType,
+ user_repo.HumanPhoneChangedType,
+ user_repo.HumanPhoneVerifiedType,
+ user_repo.HumanPhoneRemovedType,
+ user_repo.HumanAddressChangedType,
+ user_repo.HumanMFAOTPAddedType,
+ user_repo.HumanMFAOTPVerifiedType,
+ user_repo.HumanMFAOTPRemovedType,
+ user_repo.HumanOTPSMSAddedType,
+ user_repo.HumanOTPSMSRemovedType,
+ user_repo.HumanOTPEmailAddedType,
+ user_repo.HumanOTPEmailRemovedType,
+ user_repo.HumanU2FTokenAddedType,
+ user_repo.HumanU2FTokenVerifiedType,
+ user_repo.HumanU2FTokenRemovedType,
+ user_repo.HumanPasswordlessTokenAddedType,
+ user_repo.HumanPasswordlessTokenVerifiedType,
+ user_repo.HumanPasswordlessTokenRemovedType,
+ user_repo.HumanMFAInitSkippedType,
+ user_repo.MachineChangedEventType,
+ user_repo.HumanPasswordChangedType,
+ user_repo.HumanInitialCodeAddedType,
+ user_repo.UserV1InitialCodeAddedType,
+ user_repo.UserV1InitializedCheckSucceededType,
+ user_repo.HumanInitializedCheckSucceededType,
+ user_repo.HumanPasswordlessInitCodeAddedType,
+ user_repo.HumanPasswordlessInitCodeRequestedType:
+ user, err = u.view.UserByID(event.Aggregate().ID, event.Aggregate().InstanceID)
if err != nil {
- return err
- }
- user = &view_model.UserView{}
- for _, e := range events {
- if err = user.AppendEvent(e); err != nil {
+ if !errors.IsNotFound(err) {
+ return err
+ }
+ user, err = u.userFromEventstore(event.Aggregate(), user.EventTypes())
+ if err != nil {
return err
}
}
- }
- err = user.AppendEvent(event)
- case user_repo.UserDomainClaimedType,
- user_repo.UserUserNameChangedType:
- user, err = u.view.UserByID(event.AggregateID, event.InstanceID)
- if err != nil {
- if !errors.IsNotFound(err) {
- return err
- }
- logging.WithFields(
- "instance", event.InstanceID,
- "userID", event.AggregateID,
- "eventType", event.Type,
- ).Info("user not found in view")
- query, err := usr_view.UserByIDQuery(event.AggregateID, event.InstanceID, 0, user.EventTypes())
+ err = user.AppendEvent(event)
+ case user_repo.UserDomainClaimedType,
+ user_repo.UserUserNameChangedType:
+ user, err = u.view.UserByID(event.Aggregate().ID, event.Aggregate().InstanceID)
if err != nil {
- return err
- }
- events, err := u.es.FilterEvents(context.Background(), query)
- if err != nil {
- return err
- }
- user = &view_model.UserView{}
- for _, e := range events {
- if err = user.AppendEvent(e); err != nil {
+ if !errors.IsNotFound(err) {
+ return err
+ }
+ user, err = u.userFromEventstore(event.Aggregate(), user.EventTypes())
+ if err != nil {
return err
}
}
+ err = user.AppendEvent(event)
+ if err != nil {
+ return err
+ }
+ err = u.fillLoginNames(user)
+ case user_repo.UserRemovedType:
+ return u.view.DeleteUser(event.Aggregate().ID, event.Aggregate().InstanceID, event)
+ default:
+ return nil
}
- err = user.AppendEvent(event)
if err != nil {
return err
}
- err = u.fillLoginNames(user)
- case user_repo.UserRemovedType:
- return u.view.DeleteUser(event.AggregateID, event.InstanceID, event)
- default:
- return u.view.ProcessedUserSequence(event)
- }
- if err != nil {
- return err
- }
- return u.view.PutUser(user, event)
+ return u.view.PutUser(user, event)
+ }), nil
}
func (u *User) fillLoginNames(user *view_model.UserView) (err error) {
@@ -236,38 +436,44 @@ func (u *User) fillLoginNames(user *view_model.UserView) (err error) {
return nil
}
-func (u *User) ProcessOrg(event *es_models.Event) (err error) {
- switch eventstore.EventType(event.Type) {
- case org.OrgDomainVerifiedEventType,
- org.OrgDomainRemovedEventType,
- org.DomainPolicyAddedEventType,
- org.DomainPolicyChangedEventType,
- org.DomainPolicyRemovedEventType:
- return u.fillLoginNamesOnOrgUsers(event)
- case org.OrgDomainPrimarySetEventType:
- return u.fillPreferredLoginNamesOnOrgUsers(event)
- case org.OrgRemovedEventType:
- return u.view.UpdateOrgOwnerRemovedUsers(event)
- default:
- return u.view.ProcessedUserSequence(event)
- }
+func (u *User) ProcessOrg(event eventstore.Event) (_ *handler.Statement, err error) {
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ switch event.Type() {
+ case org.OrgDomainVerifiedEventType,
+ org.OrgDomainRemovedEventType,
+ org.DomainPolicyAddedEventType,
+ org.DomainPolicyChangedEventType,
+ org.DomainPolicyRemovedEventType:
+ return u.fillLoginNamesOnOrgUsers(event)
+ case org.OrgDomainPrimarySetEventType:
+ return u.fillPreferredLoginNamesOnOrgUsers(event)
+ case org.OrgRemovedEventType:
+ return u.view.UpdateOrgOwnerRemovedUsers(event)
+ default:
+ return nil
+ }
+ }), nil
}
-func (u *User) ProcessInstance(event *es_models.Event) (err error) {
- switch eventstore.EventType(event.Type) {
+func (u *User) ProcessInstance(event eventstore.Event) (_ *handler.Statement, err error) {
+ switch event.Type() {
case instance.InstanceRemovedEventType:
- return u.view.DeleteInstanceUsers(event)
+ return handler.NewStatement(event,
+ func(ex handler.Executer, projectionName string) error {
+ return u.view.DeleteInstanceUsers(event)
+ },
+ ), nil
default:
- return u.view.ProcessedUserSequence(event)
+ return handler.NewNoOpStatement(event), nil
}
}
-func (u *User) fillLoginNamesOnOrgUsers(event *es_models.Event) error {
- userLoginMustBeDomain, _, domains, err := u.loginNameInformation(context.Background(), event.ResourceOwner, event.InstanceID)
+func (u *User) fillLoginNamesOnOrgUsers(event eventstore.Event) error {
+ userLoginMustBeDomain, _, domains, err := u.loginNameInformation(context.Background(), event.Aggregate().ResourceOwner, event.Aggregate().InstanceID)
if err != nil {
return err
}
- users, err := u.view.UsersByOrgID(event.AggregateID, event.InstanceID)
+ users, err := u.view.UsersByOrgID(event.Aggregate().ID, event.Aggregate().InstanceID)
if err != nil {
return err
}
@@ -277,15 +483,15 @@ func (u *User) fillLoginNamesOnOrgUsers(event *es_models.Event) error {
return u.view.PutUsers(users, event)
}
-func (u *User) fillPreferredLoginNamesOnOrgUsers(event *es_models.Event) error {
- userLoginMustBeDomain, primaryDomain, _, err := u.loginNameInformation(context.Background(), event.ResourceOwner, event.InstanceID)
+func (u *User) fillPreferredLoginNamesOnOrgUsers(event eventstore.Event) error {
+ userLoginMustBeDomain, primaryDomain, _, err := u.loginNameInformation(context.Background(), event.Aggregate().ResourceOwner, event.Aggregate().InstanceID)
if err != nil {
return err
}
if !userLoginMustBeDomain {
return nil
}
- users, err := u.view.UsersByOrgID(event.AggregateID, event.InstanceID)
+ users, err := u.view.UsersByOrgID(event.Aggregate().ID, event.Aggregate().InstanceID)
if err != nil {
return err
}
@@ -295,17 +501,8 @@ func (u *User) fillPreferredLoginNamesOnOrgUsers(event *es_models.Event) error {
return u.view.PutUsers(users, event)
}
-func (u *User) OnError(event *es_models.Event, err error) error {
- logging.WithFields("id", event.AggregateID).WithError(err).Warn("something went wrong in user handler")
- return spooler.HandleError(event, err, u.view.GetLatestUserFailedEvent, u.view.ProcessedUserFailedEvent, u.view.ProcessedUserSequence, u.errorCountUntilSkip)
-}
-
-func (u *User) OnSuccess(instanceIDs []string) error {
- return spooler.HandleSuccess(u.view.UpdateUserSpoolerRunTimestamp, instanceIDs)
-}
-
func (u *User) getOrgByID(ctx context.Context, orgID, instanceID string) (*org_model.Org, error) {
- orgQuery, err := view.OrgByIDQuery(orgID, instanceID, 0)
+ query, err := org_view.OrgByIDQuery(orgID, instanceID, 0)
if err != nil {
return nil, err
}
@@ -315,8 +512,11 @@ func (u *User) getOrgByID(ctx context.Context, orgID, instanceID string) (*org_m
AggregateID: orgID,
},
}
- err = es_sdk.Filter(ctx, u.Eventstore().FilterEvents, esOrg.AppendEvents, orgQuery)
- if err != nil && !errors.IsNotFound(err) {
+ events, err := u.es.Filter(ctx, query)
+ if err != nil {
+ return nil, err
+ }
+ if err = esOrg.AppendEvents(events...); err != nil {
return nil, err
}
if esOrg.Sequence == 0 {
@@ -334,9 +534,27 @@ func (u *User) loginNameInformation(ctx context.Context, orgID string, instanceI
if org.DomainPolicy != nil {
return org.DomainPolicy.UserLoginMustBeDomain, org.GetPrimaryDomain().Domain, org.Domains, nil
}
- policy, err := u.queries.DefaultDomainPolicy(withInstanceID(ctx, org.InstanceID))
+ policy, err := u.queries.DefaultDomainPolicy(authz.WithInstanceID(ctx, org.InstanceID))
if err != nil {
return false, "", nil, err
}
return policy.UserLoginMustBeDomain, org.GetPrimaryDomain().Domain, org.Domains, nil
}
+
+func (u *User) userFromEventstore(agg *eventstore.Aggregate, eventTypes []eventstore.EventType) (*view_model.UserView, error) {
+ query, err := usr_view.UserByIDQuery(agg.ID, agg.InstanceID, 0, eventTypes)
+ if err != nil {
+ return nil, err
+ }
+ events, err := u.es.Filter(context.Background(), query)
+ if err != nil {
+ return nil, err
+ }
+ user := &view_model.UserView{}
+ for _, e := range events {
+ if err = user.AppendEvent(e); err != nil {
+ return nil, err
+ }
+ }
+ return user, nil
+}
diff --git a/internal/auth/repository/eventsourcing/handler/user_session.go b/internal/auth/repository/eventsourcing/handler/user_session.go
index a0148edd68..5c8807cc2d 100644
--- a/internal/auth/repository/eventsourcing/handler/user_session.go
+++ b/internal/auth/repository/eventsourcing/handler/user_session.go
@@ -3,19 +3,16 @@ package handler
import (
"context"
- "github.com/zitadel/logging"
-
+ "github.com/zitadel/zitadel/internal/api/authz"
+ auth_view "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- es_sdk "github.com/zitadel/zitadel/internal/eventstore/v1/sdk"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
org_model "github.com/zitadel/zitadel/internal/org/model"
org_es_model "github.com/zitadel/zitadel/internal/org/repository/eventsourcing/model"
- "github.com/zitadel/zitadel/internal/org/repository/view"
+ org_view "github.com/zitadel/zitadel/internal/org/repository/view"
query2 "github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -28,158 +25,299 @@ const (
)
type UserSession struct {
- handler
- subscription *v1.Subscription
- queries *query2.Queries
+ queries *query2.Queries
+ view *auth_view.View
+ es handler.EventStore
}
-func newUserSession(ctx context.Context, handler handler, queries *query2.Queries) *UserSession {
- h := &UserSession{
- handler: handler,
- queries: queries,
- }
+var _ handler.Projection = (*UserSession)(nil)
- h.subscribe(ctx)
-
- return h
+func newUserSession(
+ ctx context.Context,
+ config handler.Config,
+ view *auth_view.View,
+ queries *query2.Queries,
+) *handler.Handler {
+ return handler.NewHandler(
+ ctx,
+ &config,
+ &UserSession{
+ queries: queries,
+ view: view,
+ es: config.Eventstore,
+ },
+ )
}
-func (u *UserSession) subscribe(ctx context.Context) {
- u.subscription = u.es.Subscribe(u.AggregateTypes()...)
- go func() {
- for event := range u.subscription.Events {
- query.ReduceEvent(ctx, u, event)
- }
- }()
-}
-
-func (u *UserSession) ViewModel() string {
+// Name implements [handler.Projection]
+func (*UserSession) Name() string {
return userSessionTable
}
-func (u *UserSession) Subscription() *v1.Subscription {
- return u.subscription
-}
-
-func (_ *UserSession) AggregateTypes() []models.AggregateType {
- return []models.AggregateType{user.AggregateType, org.AggregateType, instance.AggregateType}
-}
-
-func (u *UserSession) CurrentSequence(ctx context.Context, instanceID string) (uint64, error) {
- sequence, err := u.view.GetLatestUserSessionSequence(ctx, instanceID)
- if err != nil {
- return 0, err
+// Reducers implements [handler.Projection]
+func (s *UserSession) Reducers() []handler.AggregateReducer {
+ return []handler.AggregateReducer{
+ {
+ Aggregate: user.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: user.UserV1PasswordCheckSucceededType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserV1PasswordCheckFailedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserV1MFAOTPCheckSucceededType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserV1MFAOTPCheckFailedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserV1SignedOutType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanPasswordCheckSucceededType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanPasswordCheckFailedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserIDPLoginCheckSucceededType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanMFAOTPCheckSucceededType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanMFAOTPCheckFailedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanU2FTokenCheckSucceededType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanU2FTokenCheckFailedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanPasswordlessTokenCheckSucceededType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanPasswordlessTokenCheckFailedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanSignedOutType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserV1PasswordChangedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserV1MFAOTPRemovedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserV1ProfileChangedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserLockedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserDeactivatedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanPasswordChangedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanMFAOTPRemovedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanProfileChangedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanAvatarAddedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanAvatarRemovedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserDomainClaimedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserUserNameChangedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserIDPLinkRemovedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserIDPLinkCascadeRemovedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanPasswordlessTokenRemovedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.HumanU2FTokenRemovedType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: user.UserRemovedType,
+ Reduce: s.Reduce,
+ },
+ },
+ },
+ {
+ Aggregate: org.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: org.OrgDomainPrimarySetEventType,
+ Reduce: s.Reduce,
+ },
+ {
+ Event: org.OrgRemovedEventType,
+ Reduce: s.Reduce,
+ },
+ },
+ },
+ {
+ Aggregate: instance.AggregateType,
+ EventReducers: []handler.EventReducer{
+ {
+ Event: instance.InstanceRemovedEventType,
+ Reduce: s.Reduce,
+ },
+ },
+ },
}
- return sequence.CurrentSequence, nil
}
-func (u *UserSession) EventQuery(ctx context.Context, instanceIDs []string) (*models.SearchQuery, error) {
- sequences, err := u.view.GetLatestUserSessionSequences(ctx, instanceIDs)
- if err != nil {
- return nil, err
- }
- return newSearchQuery(sequences, u.AggregateTypes(), instanceIDs), nil
+func (u *UserSession) Reduce(event eventstore.Event) (_ *handler.Statement, err error) {
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ var session *view_model.UserSessionView
+ switch event.Type() {
+ case user.UserV1PasswordCheckSucceededType,
+ user.UserV1PasswordCheckFailedType,
+ user.UserV1MFAOTPCheckSucceededType,
+ user.UserV1MFAOTPCheckFailedType,
+ user.UserV1SignedOutType,
+ user.HumanPasswordCheckSucceededType,
+ user.HumanPasswordCheckFailedType,
+ user.UserIDPLoginCheckSucceededType,
+ user.HumanMFAOTPCheckSucceededType,
+ user.HumanMFAOTPCheckFailedType,
+ user.HumanU2FTokenCheckSucceededType,
+ user.HumanU2FTokenCheckFailedType,
+ user.HumanPasswordlessTokenCheckSucceededType,
+ user.HumanPasswordlessTokenCheckFailedType,
+ user.HumanSignedOutType:
+
+ eventData, err := view_model.UserSessionFromEvent(event)
+ if err != nil {
+ return err
+ }
+ session, err = u.view.UserSessionByIDs(eventData.UserAgentID, event.Aggregate().ID, event.Aggregate().InstanceID)
+ if err != nil {
+ if !errors.IsNotFound(err) {
+ return err
+ }
+ session = &view_model.UserSessionView{
+ CreationDate: event.CreatedAt(),
+ ResourceOwner: event.Aggregate().ResourceOwner,
+ UserAgentID: eventData.UserAgentID,
+ UserID: event.Aggregate().ID,
+ State: int32(domain.UserSessionStateActive),
+ InstanceID: event.Aggregate().InstanceID,
+ }
+ }
+ return u.updateSession(session, event)
+ case user.UserV1PasswordChangedType,
+ user.UserV1MFAOTPRemovedType,
+ user.UserV1ProfileChangedType,
+ user.UserLockedType,
+ user.UserDeactivatedType,
+ user.HumanPasswordChangedType,
+ user.HumanMFAOTPRemovedType,
+ user.HumanProfileChangedType,
+ user.HumanAvatarAddedType,
+ user.HumanAvatarRemovedType,
+ user.UserDomainClaimedType,
+ user.UserUserNameChangedType,
+ user.UserIDPLinkRemovedType,
+ user.UserIDPLinkCascadeRemovedType,
+ user.HumanPasswordlessTokenRemovedType,
+ user.HumanU2FTokenRemovedType:
+ sessions, err := u.view.UserSessionsByUserID(event.Aggregate().ID, event.Aggregate().InstanceID)
+ if err != nil || len(sessions) == 0 {
+ return err
+ }
+ if err = u.appendEventOnSessions(sessions, event); err != nil {
+ return err
+ }
+ if err = u.view.PutUserSessions(sessions); err != nil {
+ return err
+ }
+ return nil
+ case org.OrgDomainPrimarySetEventType:
+ return u.fillLoginNamesOnOrgUsers(event)
+ case user.UserRemovedType:
+ return u.view.DeleteUserSessions(event.Aggregate().ID, event.Aggregate().InstanceID)
+ case instance.InstanceRemovedEventType:
+ return u.view.DeleteInstanceUserSessions(event.Aggregate().InstanceID)
+ case org.OrgRemovedEventType:
+ return u.view.DeleteOrgUserSessions(event)
+ default:
+ return nil
+ }
+ }), nil
}
-func (u *UserSession) Reduce(event *models.Event) (err error) {
- var session *view_model.UserSessionView
- switch eventstore.EventType(event.Type) {
- case user.UserV1PasswordCheckSucceededType,
- user.UserV1PasswordCheckFailedType,
- user.UserV1MFAOTPCheckSucceededType,
- user.UserV1MFAOTPCheckFailedType,
- user.UserV1SignedOutType,
- user.HumanPasswordCheckSucceededType,
- user.HumanPasswordCheckFailedType,
- user.UserIDPLoginCheckSucceededType,
- user.HumanMFAOTPCheckSucceededType,
- user.HumanMFAOTPCheckFailedType,
- user.HumanU2FTokenCheckSucceededType,
- user.HumanU2FTokenCheckFailedType,
- user.HumanPasswordlessTokenCheckSucceededType,
- user.HumanPasswordlessTokenCheckFailedType,
- user.HumanSignedOutType:
- eventData, err := view_model.UserSessionFromEvent(event)
- if err != nil {
+func (u *UserSession) appendEventOnSessions(sessions []*view_model.UserSessionView, event eventstore.Event) error {
+ for _, session := range sessions {
+ if err := session.AppendEvent(event); err != nil {
return err
}
- session, err = u.view.UserSessionByIDs(eventData.UserAgentID, event.AggregateID, event.InstanceID)
- if err != nil {
- if !errors.IsNotFound(err) {
- return err
- }
- session = &view_model.UserSessionView{
- CreationDate: event.CreationDate,
- ResourceOwner: event.ResourceOwner,
- UserAgentID: eventData.UserAgentID,
- UserID: event.AggregateID,
- State: int32(domain.UserSessionStateActive),
- InstanceID: event.InstanceID,
- }
- }
- return u.updateSession(session, event)
- case user.UserV1PasswordChangedType,
- user.UserV1MFAOTPRemovedType,
- user.UserV1ProfileChangedType,
- user.UserLockedType,
- user.UserDeactivatedType,
- user.HumanPasswordChangedType,
- user.HumanMFAOTPRemovedType,
- user.HumanProfileChangedType,
- user.HumanAvatarAddedType,
- user.HumanAvatarRemovedType,
- user.UserDomainClaimedType,
- user.UserUserNameChangedType,
- user.UserIDPLinkRemovedType,
- user.UserIDPLinkCascadeRemovedType,
- user.HumanPasswordlessTokenRemovedType,
- user.HumanU2FTokenRemovedType:
- sessions, err := u.view.UserSessionsByUserID(event.AggregateID, event.InstanceID)
- if err != nil {
+ if err := u.fillUserInfo(session); err != nil {
return err
}
- if len(sessions) == 0 {
- return u.view.ProcessedUserSessionSequence(event)
- }
- for _, session := range sessions {
- if err := session.AppendEvent(event); err != nil {
- return err
- }
- if err := u.fillUserInfo(session); err != nil {
- return err
- }
- }
- return u.view.PutUserSessions(sessions, event)
- case org.OrgDomainPrimarySetEventType:
- return u.fillLoginNamesOnOrgUsers(event)
- case user.UserRemovedType:
- return u.view.DeleteUserSessions(event.AggregateID, event.InstanceID, event)
- case instance.InstanceRemovedEventType:
- return u.view.DeleteInstanceUserSessions(event)
- case org.OrgRemovedEventType:
- return u.view.DeleteOrgUserSessions(event)
- default:
- return u.view.ProcessedUserSessionSequence(event)
}
+ return nil
}
-func (u *UserSession) OnError(event *models.Event, err error) error {
- logging.WithFields("id", event.AggregateID).WithError(err).Warn("something went wrong in user session handler")
- return spooler.HandleError(event, err, u.view.GetLatestUserSessionFailedEvent, u.view.ProcessedUserSessionFailedEvent, u.view.ProcessedUserSessionSequence, u.errorCountUntilSkip)
-}
-
-func (u *UserSession) OnSuccess(instanceIDs []string) error {
- return spooler.HandleSuccess(u.view.UpdateUserSessionSpoolerRunTimestamp, instanceIDs)
-}
-
-func (u *UserSession) updateSession(session *view_model.UserSessionView, event *models.Event) error {
+func (u *UserSession) updateSession(session *view_model.UserSessionView, event eventstore.Event) error {
if err := session.AppendEvent(event); err != nil {
return err
}
if err := u.fillUserInfo(session); err != nil {
return err
}
- return u.view.PutUserSession(session, event)
+ if err := u.view.PutUserSession(session); err != nil {
+ return err
+ }
+ return nil
}
func (u *UserSession) fillUserInfo(session *view_model.UserSessionView) error {
@@ -194,15 +332,15 @@ func (u *UserSession) fillUserInfo(session *view_model.UserSessionView) error {
return nil
}
-func (u *UserSession) fillLoginNamesOnOrgUsers(event *models.Event) error {
- sessions, err := u.view.UserSessionsByOrgID(event.ResourceOwner, event.InstanceID)
+func (u *UserSession) fillLoginNamesOnOrgUsers(event eventstore.Event) error {
+ sessions, err := u.view.UserSessionsByOrgID(event.Aggregate().ResourceOwner, event.Aggregate().InstanceID)
if err != nil {
return err
}
if len(sessions) == 0 {
- return u.view.ProcessedUserSessionSequence(event)
+ return nil
}
- userLoginMustBeDomain, primaryDomain, err := u.loginNameInformation(context.Background(), event.ResourceOwner, event.InstanceID)
+ userLoginMustBeDomain, primaryDomain, err := u.loginNameInformation(context.Background(), event.Aggregate().ResourceOwner, event.Aggregate().InstanceID)
if err != nil {
return err
}
@@ -212,7 +350,7 @@ func (u *UserSession) fillLoginNamesOnOrgUsers(event *models.Event) error {
for _, session := range sessions {
session.LoginName = session.UserName + "@" + primaryDomain
}
- return u.view.PutUserSessions(sessions, event)
+ return u.view.PutUserSessions(sessions)
}
func (u *UserSession) loginNameInformation(ctx context.Context, orgID string, instanceID string) (userLoginMustBeDomain bool, primaryDomain string, err error) {
@@ -223,7 +361,7 @@ func (u *UserSession) loginNameInformation(ctx context.Context, orgID string, in
if org.DomainPolicy != nil {
return org.DomainPolicy.UserLoginMustBeDomain, org.GetPrimaryDomain().Domain, nil
}
- policy, err := u.queries.DefaultDomainPolicy(withInstanceID(ctx, org.InstanceID))
+ policy, err := u.queries.DefaultDomainPolicy(authz.WithInstanceID(ctx, org.InstanceID))
if err != nil {
return false, "", err
}
@@ -231,7 +369,7 @@ func (u *UserSession) loginNameInformation(ctx context.Context, orgID string, in
}
func (u *UserSession) getOrgByID(ctx context.Context, orgID, instanceID string) (*org_model.Org, error) {
- orgQuery, err := view.OrgByIDQuery(orgID, instanceID, 0)
+ query, err := org_view.OrgByIDQuery(orgID, instanceID, 0)
if err != nil {
return nil, err
}
@@ -241,13 +379,16 @@ func (u *UserSession) getOrgByID(ctx context.Context, orgID, instanceID string)
AggregateID: orgID,
},
}
- err = es_sdk.Filter(ctx, u.Eventstore().FilterEvents, esOrg.AppendEvents, orgQuery)
- if err != nil && !errors.IsNotFound(err) {
+ events, err := u.es.Filter(ctx, query)
+ if err != nil {
return nil, err
}
+ if err = esOrg.AppendEvents(events...); err != nil {
+ return nil, err
+ }
+
if esOrg.Sequence == 0 {
return nil, errors.ThrowNotFound(nil, "EVENT-3m9vs", "Errors.Org.NotFound")
}
-
return org_es_model.OrgToModel(esOrg), nil
}
diff --git a/internal/auth/repository/eventsourcing/repository.go b/internal/auth/repository/eventsourcing/repository.go
index b8d41e009f..f3d11e74d1 100644
--- a/internal/auth/repository/eventsourcing/repository.go
+++ b/internal/auth/repository/eventsourcing/repository.go
@@ -5,7 +5,7 @@ import (
"github.com/zitadel/zitadel/feature"
"github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/eventstore"
- "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/spooler"
+ auth_handler "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/handler"
auth_view "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/auth_request/repository/cache"
"github.com/zitadel/zitadel/internal/command"
@@ -13,20 +13,16 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
eventstore2 "github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- es_spol "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/query"
)
type Config struct {
SearchLimit uint64
- Spooler spooler.SpoolerConfig
+ Spooler auth_handler.Config
}
type EsRepository struct {
- spooler *es_spol.Spooler
- Eventstore v1.Eventstore
eventstore.UserRepo
eventstore.AuthRequestRepo
eventstore.TokenRepo
@@ -35,25 +31,19 @@ type EsRepository struct {
eventstore.OrgRepository
}
-func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, command *command.Commands, queries *query.Queries, dbClient *database.DB, esV2 *eventstore2.Eventstore, oidcEncryption crypto.EncryptionAlgorithm, userEncryption crypto.EncryptionAlgorithm, allowOrderByCreationDate bool) (*EsRepository, error) {
- es, err := v1.Start(dbClient, allowOrderByCreationDate)
+func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, command *command.Commands, queries *query.Queries, dbClient *database.DB, esV2 *eventstore2.Eventstore, oidcEncryption crypto.EncryptionAlgorithm, userEncryption crypto.EncryptionAlgorithm) (*EsRepository, error) {
+ view, err := auth_view.StartView(dbClient, oidcEncryption, queries, esV2)
if err != nil {
return nil, err
}
- idGenerator := id.SonyFlakeGenerator()
- view, err := auth_view.StartView(dbClient, oidcEncryption, queries, idGenerator, es)
- if err != nil {
- return nil, err
- }
+ auth_handler.Register(ctx, conf.Spooler, view, queries)
authReq := cache.Start(dbClient)
- spool := spooler.StartSpooler(ctx, conf.Spooler, es, esV2, view, dbClient, queries)
-
userRepo := eventstore.UserRepo{
SearchLimit: conf.SearchLimit,
- Eventstore: es,
+ Eventstore: esV2,
View: view,
Query: queries,
SystemDefaults: systemDefaults,
@@ -64,8 +54,6 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, c
view,
}
return &EsRepository{
- spool,
- es,
userRepo,
eventstore.AuthRequestRepo{
PrivacyPolicyProvider: queries,
@@ -75,7 +63,6 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, c
OrgViewProvider: queries,
AuthRequests: authReq,
View: view,
- Eventstore: es,
UserCodeAlg: userEncryption,
UserSessionViewProvider: view,
UserViewProvider: view,
@@ -90,15 +77,15 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, c
ApplicationProvider: queries,
CustomTextProvider: queries,
FeatureCheck: feature.NewCheck(esV2),
- IdGenerator: idGenerator,
+ IdGenerator: id.SonyFlakeGenerator(),
},
eventstore.TokenRepo{
View: view,
- Eventstore: es,
+ Eventstore: esV2,
},
eventstore.RefreshTokenRepo{
View: view,
- Eventstore: es,
+ Eventstore: esV2,
SearchLimit: conf.SearchLimit,
KeyAlgorithm: oidcEncryption,
},
@@ -109,7 +96,7 @@ func Start(ctx context.Context, conf Config, systemDefaults sd.SystemDefaults, c
SearchLimit: conf.SearchLimit,
View: view,
SystemDefaults: systemDefaults,
- Eventstore: es,
+ Eventstore: esV2,
Query: queries,
},
}, nil
diff --git a/internal/auth/repository/eventsourcing/spooler/lock.go b/internal/auth/repository/eventsourcing/spooler/lock.go
deleted file mode 100644
index 1861eb4460..0000000000
--- a/internal/auth/repository/eventsourcing/spooler/lock.go
+++ /dev/null
@@ -1,24 +0,0 @@
-package spooler
-
-import (
- "database/sql"
- "time"
-
- es_locker "github.com/zitadel/zitadel/internal/eventstore/v1/locker"
-)
-
-const (
- lockTable = "auth.locks"
-)
-
-type locker struct {
- dbClient *sql.DB
-}
-
-func NewLocker(client *sql.DB) *locker {
- return &locker{dbClient: client}
-}
-
-func (l *locker) Renew(lockerID, viewModel, instanceID string, waitTime time.Duration) error {
- return es_locker.Renew(l.dbClient, lockTable, lockerID, viewModel, instanceID, waitTime)
-}
diff --git a/internal/auth/repository/eventsourcing/spooler/spooler.go b/internal/auth/repository/eventsourcing/spooler/spooler.go
deleted file mode 100644
index dfbfc73b27..0000000000
--- a/internal/auth/repository/eventsourcing/spooler/spooler.go
+++ /dev/null
@@ -1,35 +0,0 @@
-package spooler
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/handler"
- "github.com/zitadel/zitadel/internal/auth/repository/eventsourcing/view"
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler"
- "github.com/zitadel/zitadel/internal/query"
-)
-
-type SpoolerConfig struct {
- BulkLimit uint64
- FailureCountUntilSkip uint64
- ConcurrentWorkers int
- ConcurrentInstances int
- Handlers handler.Configs
-}
-
-func StartSpooler(ctx context.Context, c SpoolerConfig, es v1.Eventstore, esV2 *eventstore.Eventstore, view *view.View, client *database.DB, queries *query.Queries) *spooler.Spooler {
- spoolerConfig := spooler.Config{
- Eventstore: es,
- EventstoreV2: esV2,
- Locker: &locker{dbClient: client.DB},
- ConcurrentWorkers: c.ConcurrentWorkers,
- ConcurrentInstances: c.ConcurrentInstances,
- ViewHandlers: handler.Register(ctx, c.Handlers, c.BulkLimit, c.FailureCountUntilSkip, view, es, queries),
- }
- spool := spoolerConfig.New()
- spool.Start()
- return spool
-}
diff --git a/internal/auth/repository/eventsourcing/view/error_event.go b/internal/auth/repository/eventsourcing/view/error_event.go
deleted file mode 100644
index d343d5820a..0000000000
--- a/internal/auth/repository/eventsourcing/view/error_event.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package view
-
-import (
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-const (
- errTable = "auth.failed_events"
-)
-
-func (v *View) saveFailedEvent(failedEvent *repository.FailedEvent) error {
- return repository.SaveFailedEvent(v.Db, errTable, failedEvent)
-}
-
-func (v *View) latestFailedEvent(viewName, instanceID string, sequence uint64) (*repository.FailedEvent, error) {
- return repository.LatestFailedEvent(v.Db, errTable, viewName, instanceID, sequence)
-}
diff --git a/internal/auth/repository/eventsourcing/view/refresh_token.go b/internal/auth/repository/eventsourcing/view/refresh_token.go
index 2740c2ec84..64933bc7cb 100644
--- a/internal/auth/repository/eventsourcing/view/refresh_token.go
+++ b/internal/auth/repository/eventsourcing/view/refresh_token.go
@@ -3,12 +3,14 @@ package view
import (
"context"
+ "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/query"
user_model "github.com/zitadel/zitadel/internal/user/model"
usr_view "github.com/zitadel/zitadel/internal/user/repository/view"
"github.com/zitadel/zitadel/internal/user/repository/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
)
const (
@@ -27,36 +29,28 @@ func (v *View) SearchRefreshTokens(request *user_model.RefreshTokenSearchRequest
return usr_view.SearchRefreshTokens(v.Db, refreshTokenTable, request)
}
-func (v *View) PutRefreshToken(token *model.RefreshTokenView, event *models.Event) error {
- err := usr_view.PutRefreshToken(v.Db, refreshTokenTable, token)
- if err != nil {
- return err
- }
- return v.ProcessedRefreshTokenSequence(event)
+func (v *View) PutRefreshToken(token *model.RefreshTokenView) error {
+ return usr_view.PutRefreshToken(v.Db, refreshTokenTable, token)
}
-func (v *View) PutRefreshTokens(token []*model.RefreshTokenView, event *models.Event) error {
- err := usr_view.PutRefreshTokens(v.Db, refreshTokenTable, token...)
- if err != nil {
- return err
- }
- return v.ProcessedRefreshTokenSequence(event)
+func (v *View) PutRefreshTokens(token []*model.RefreshTokenView) error {
+ return usr_view.PutRefreshTokens(v.Db, refreshTokenTable, token...)
}
-func (v *View) DeleteRefreshToken(tokenID, instanceID string, event *models.Event) error {
+func (v *View) DeleteRefreshToken(tokenID, instanceID string) error {
err := usr_view.DeleteRefreshToken(v.Db, refreshTokenTable, tokenID, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedRefreshTokenSequence(event)
+ return nil
}
-func (v *View) DeleteUserRefreshTokens(userID, instanceID string, event *models.Event) error {
+func (v *View) DeleteUserRefreshTokens(userID, instanceID string) error {
err := usr_view.DeleteUserRefreshTokens(v.Db, refreshTokenTable, userID, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedRefreshTokenSequence(event)
+ return nil
}
func (v *View) DeleteApplicationRefreshTokens(event *models.Event, ids ...string) error {
@@ -64,45 +58,40 @@ func (v *View) DeleteApplicationRefreshTokens(event *models.Event, ids ...string
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedRefreshTokenSequence(event)
+ return nil
}
-func (v *View) DeleteInstanceRefreshTokens(event *models.Event) error {
- err := usr_view.DeleteInstanceRefreshTokens(v.Db, refreshTokenTable, event.InstanceID)
+func (v *View) DeleteInstanceRefreshTokens(instanceID string) error {
+ err := usr_view.DeleteInstanceRefreshTokens(v.Db, refreshTokenTable, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedRefreshTokenSequence(event)
+ return nil
}
-func (v *View) DeleteOrgRefreshTokens(event *models.Event) error {
- err := usr_view.DeleteOrgRefreshTokens(v.Db, refreshTokenTable, event.InstanceID, event.ResourceOwner)
+func (v *View) DeleteOrgRefreshTokens(event eventstore.Event) error {
+ err := usr_view.DeleteOrgRefreshTokens(v.Db, refreshTokenTable, event.Aggregate().InstanceID, event.Aggregate().ResourceOwner)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedRefreshTokenSequence(event)
+ return nil
}
-func (v *View) GetLatestRefreshTokenSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return v.latestSequence(ctx, refreshTokenTable, instanceID)
-}
-
-func (v *View) GetLatestRefreshTokenSequences(ctx context.Context, instanceIDs []string) ([]*repository.CurrentSequence, error) {
- return v.latestSequences(ctx, refreshTokenTable, instanceIDs)
-}
-
-func (v *View) ProcessedRefreshTokenSequence(event *models.Event) error {
- return v.saveCurrentSequence(refreshTokenTable, event)
-}
-
-func (v *View) UpdateRefreshTokenSpoolerRunTimestamp(instanceIDs []string) error {
- return v.updateSpoolerRunSequence(refreshTokenTable, instanceIDs)
-}
-
-func (v *View) GetLatestRefreshTokenFailedEvent(sequence uint64, instanceID string) (*repository.FailedEvent, error) {
- return v.latestFailedEvent(refreshTokenTable, instanceID, sequence)
-}
-
-func (v *View) ProcessedRefreshTokenFailedEvent(failedEvent *repository.FailedEvent) error {
- return v.saveFailedEvent(failedEvent)
+func (v *View) GetLatestRefreshTokenSequence(ctx context.Context) (_ *query.CurrentState, err error) {
+ q := &query.CurrentStateSearchQueries{
+ Queries: make([]query.SearchQuery, 2),
+ }
+ q.Queries[0], err = query.NewCurrentStatesInstanceIDSearchQuery(authz.GetInstance(ctx).InstanceID())
+ if err != nil {
+ return nil, err
+ }
+ q.Queries[1], err = query.NewCurrentStatesProjectionSearchQuery(refreshTokenTable)
+ if err != nil {
+ return nil, err
+ }
+ states, err := v.query.SearchCurrentStates(ctx, q)
+ if err != nil || states.SearchResponse.Count == 0 {
+ return nil, err
+ }
+ return states.CurrentStates[0], nil
}
diff --git a/internal/auth/repository/eventsourcing/view/sequence.go b/internal/auth/repository/eventsourcing/view/sequence.go
deleted file mode 100644
index 71c77cb6a4..0000000000
--- a/internal/auth/repository/eventsourcing/view/sequence.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package view
-
-import (
- "context"
- "time"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-const (
- sequencesTable = "auth.current_sequences"
-)
-
-func (v *View) saveCurrentSequence(viewName string, event *models.Event) error {
- return repository.SaveCurrentSequence(v.Db, sequencesTable, viewName, event.InstanceID, event.Sequence, event.CreationDate)
-}
-
-func (v *View) latestSequence(ctx context.Context, viewName, instanceID string) (*repository.CurrentSequence, error) {
- return repository.LatestSequence(v.Db, v.TimeTravel(ctx, sequencesTable), viewName, instanceID)
-}
-
-func (v *View) latestSequences(ctx context.Context, viewName string, instanceIDs []string) ([]*repository.CurrentSequence, error) {
- return repository.LatestSequences(v.Db, v.TimeTravel(ctx, sequencesTable), viewName, instanceIDs)
-}
-
-func (v *View) updateSpoolerRunSequence(viewName string, instanceIDs []string) error {
- currentSequences, err := repository.LatestSequences(v.Db, sequencesTable, viewName, instanceIDs)
- if err != nil {
- return err
- }
- for _, currentSequence := range currentSequences {
- if currentSequence.ViewName == "" {
- currentSequence.ViewName = viewName
- }
- currentSequence.LastSuccessfulSpoolerRun = time.Now()
- }
- return repository.UpdateCurrentSequences(v.Db, sequencesTable, currentSequences)
-}
diff --git a/internal/auth/repository/eventsourcing/view/token.go b/internal/auth/repository/eventsourcing/view/token.go
index 3f3909cdb3..549907d893 100644
--- a/internal/auth/repository/eventsourcing/view/token.go
+++ b/internal/auth/repository/eventsourcing/view/token.go
@@ -4,10 +4,10 @@ import (
"context"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/query"
usr_view "github.com/zitadel/zitadel/internal/user/repository/view"
"github.com/zitadel/zitadel/internal/user/repository/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
)
const (
@@ -22,98 +22,85 @@ func (v *View) TokensByUserID(userID, instanceID string) ([]*model.TokenView, er
return usr_view.TokensByUserID(v.Db, tokenTable, userID, instanceID)
}
-func (v *View) PutToken(token *model.TokenView, event *models.Event) error {
- err := usr_view.PutToken(v.Db, tokenTable, token)
- if err != nil {
- return err
- }
- return v.ProcessedTokenSequence(event)
+func (v *View) PutToken(token *model.TokenView) error {
+ return usr_view.PutToken(v.Db, tokenTable, token)
}
-func (v *View) PutTokens(token []*model.TokenView, event *models.Event) error {
- err := usr_view.PutTokens(v.Db, tokenTable, token...)
- if err != nil {
- return err
- }
- return v.ProcessedTokenSequence(event)
+func (v *View) PutTokens(token []*model.TokenView) error {
+ return usr_view.PutTokens(v.Db, tokenTable, token...)
}
-func (v *View) DeleteToken(tokenID, instanceID string, event *models.Event) error {
+func (v *View) DeleteToken(tokenID, instanceID string) error {
err := usr_view.DeleteToken(v.Db, tokenTable, tokenID, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) DeleteSessionTokens(agentID, userID, instanceID string, event *models.Event) error {
- err := usr_view.DeleteSessionTokens(v.Db, tokenTable, agentID, userID, instanceID)
+func (v *View) DeleteSessionTokens(agentID string, event eventstore.Event) error {
+ err := usr_view.DeleteSessionTokens(v.Db, tokenTable, agentID, event.Aggregate().ID, event.Aggregate().InstanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) DeleteUserTokens(userID, instanceID string, event *models.Event) error {
- err := usr_view.DeleteUserTokens(v.Db, tokenTable, userID, instanceID)
+func (v *View) DeleteUserTokens(event eventstore.Event) error {
+ err := usr_view.DeleteUserTokens(v.Db, tokenTable, event.Aggregate().ID, event.Aggregate().InstanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) DeleteApplicationTokens(event *models.Event, ids ...string) error {
- err := usr_view.DeleteApplicationTokens(v.Db, tokenTable, event.InstanceID, ids)
+func (v *View) DeleteApplicationTokens(event eventstore.Event, ids ...string) error {
+ err := usr_view.DeleteApplicationTokens(v.Db, tokenTable, event.Aggregate().InstanceID, ids)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) DeleteTokensFromRefreshToken(refreshTokenID, instanceID string, event *models.Event) error {
+func (v *View) DeleteTokensFromRefreshToken(refreshTokenID, instanceID string) error {
err := usr_view.DeleteTokensFromRefreshToken(v.Db, tokenTable, refreshTokenID, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) DeleteInstanceTokens(event *models.Event) error {
- err := usr_view.DeleteInstanceTokens(v.Db, tokenTable, event.InstanceID)
+func (v *View) DeleteInstanceTokens(event eventstore.Event) error {
+ err := usr_view.DeleteInstanceTokens(v.Db, tokenTable, event.Aggregate().InstanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) DeleteOrgTokens(event *models.Event) error {
- err := usr_view.DeleteOrgTokens(v.Db, tokenTable, event.InstanceID, event.ResourceOwner)
+func (v *View) DeleteOrgTokens(event eventstore.Event) error {
+ err := usr_view.DeleteOrgTokens(v.Db, tokenTable, event.Aggregate().InstanceID, event.Aggregate().ResourceOwner)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) GetLatestTokenSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return v.latestSequence(ctx, tokenTable, instanceID)
-}
-
-func (v *View) GetLatestTokenSequences(ctx context.Context, instanceIDs []string) ([]*repository.CurrentSequence, error) {
- return v.latestSequences(ctx, tokenTable, instanceIDs)
-}
-
-func (v *View) ProcessedTokenSequence(event *models.Event) error {
- return v.saveCurrentSequence(tokenTable, event)
-}
-
-func (v *View) UpdateTokenSpoolerRunTimestamp(instanceIDs []string) error {
- return v.updateSpoolerRunSequence(tokenTable, instanceIDs)
-}
-
-func (v *View) GetLatestTokenFailedEvent(sequence uint64, instanceID string) (*repository.FailedEvent, error) {
- return v.latestFailedEvent(tokenTable, instanceID, sequence)
-}
-
-func (v *View) ProcessedTokenFailedEvent(failedEvent *repository.FailedEvent) error {
- return v.saveFailedEvent(failedEvent)
+func (v *View) GetLatestTokenSequence(ctx context.Context, instanceID string) (_ *query.CurrentState, err error) {
+ q := &query.CurrentStateSearchQueries{
+ Queries: make([]query.SearchQuery, 2),
+ }
+ q.Queries[0], err = query.NewCurrentStatesInstanceIDSearchQuery(instanceID)
+ if err != nil {
+ return nil, err
+ }
+ q.Queries[1], err = query.NewCurrentStatesProjectionSearchQuery(tokenTable)
+ if err != nil {
+ return nil, err
+ }
+ states, err := v.query.SearchCurrentStates(ctx, q)
+ if err != nil || states.SearchResponse.Count == 0 {
+ return nil, err
+ }
+ return states.CurrentStates[0], nil
}
diff --git a/internal/auth/repository/eventsourcing/view/user.go b/internal/auth/repository/eventsourcing/view/user.go
index b2008244a6..2eaf538273 100644
--- a/internal/auth/repository/eventsourcing/view/user.go
+++ b/internal/auth/repository/eventsourcing/view/user.go
@@ -4,14 +4,12 @@ import (
"context"
"github.com/zitadel/logging"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/query"
usr_model "github.com/zitadel/zitadel/internal/user/model"
"github.com/zitadel/zitadel/internal/user/repository/view"
"github.com/zitadel/zitadel/internal/user/repository/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
)
const (
@@ -104,7 +102,7 @@ func (v *View) userByID(ctx context.Context, instanceID string, queries ...query
Errorf("could not get current sequence for userByID")
user = new(model.UserView)
if sequence != nil {
- user.Sequence = sequence.CurrentSequence
+ user.Sequence = sequence.Sequence
}
}
@@ -112,7 +110,7 @@ func (v *View) userByID(ctx context.Context, instanceID string, queries ...query
if err != nil {
return nil, err
}
- events, err := v.es.FilterEvents(ctx, query)
+ events, err := v.es.Filter(ctx, query)
if err != nil && user.Sequence == 0 {
return nil, err
} else if err != nil {
@@ -138,82 +136,53 @@ func (v *View) UsersByOrgID(orgID, instanceID string) ([]*model.UserView, error)
return view.UsersByOrgID(v.Db, userTable, orgID, instanceID)
}
-func (v *View) UserIDsByDomain(domain, instanceID string) ([]string, error) {
- return view.UserIDsByDomain(v.Db, userTable, domain, instanceID)
+func (v *View) PutUser(user *model.UserView, event eventstore.Event) error {
+ return view.PutUser(v.Db, userTable, user)
}
-func (v *View) SearchUsers(request *usr_model.UserSearchRequest) ([]*model.UserView, uint64, error) {
- return view.SearchUsers(v.Db, userTable, request)
+func (v *View) PutUsers(users []*model.UserView, event eventstore.Event) error {
+ return view.PutUsers(v.Db, userTable, users...)
}
-func (v *View) GetGlobalUserByLoginName(email, instanceID string) (*model.UserView, error) {
- return view.GetGlobalUserByLoginName(v.Db, userTable, email, instanceID)
-}
-
-func (v *View) UserMFAs(userID, instanceID string) ([]*usr_model.MultiFactor, error) {
- return view.UserMFAs(v.Db, userTable, userID, instanceID)
-}
-
-func (v *View) PutUser(user *model.UserView, event *models.Event) error {
- err := view.PutUser(v.Db, userTable, user)
- if err != nil {
- return err
- }
- return v.ProcessedUserSequence(event)
-}
-
-func (v *View) PutUsers(users []*model.UserView, event *models.Event) error {
- err := view.PutUsers(v.Db, userTable, users...)
- if err != nil {
- return err
- }
- return v.ProcessedUserSequence(event)
-}
-
-func (v *View) DeleteUser(userID, instanceID string, event *models.Event) error {
+func (v *View) DeleteUser(userID, instanceID string, event eventstore.Event) error {
err := view.DeleteUser(v.Db, userTable, userID, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedUserSequence(event)
+ return nil
}
-func (v *View) DeleteInstanceUsers(event *models.Event) error {
- err := view.DeleteInstanceUsers(v.Db, userTable, event.InstanceID)
+func (v *View) DeleteInstanceUsers(event eventstore.Event) error {
+ err := view.DeleteInstanceUsers(v.Db, userTable, event.Aggregate().InstanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedUserSequence(event)
+ return nil
}
-func (v *View) UpdateOrgOwnerRemovedUsers(event *models.Event) error {
- err := view.UpdateOrgOwnerRemovedUsers(v.Db, userTable, event.InstanceID, event.AggregateID)
+func (v *View) UpdateOrgOwnerRemovedUsers(event eventstore.Event) error {
+ err := view.UpdateOrgOwnerRemovedUsers(v.Db, userTable, event.Aggregate().InstanceID, event.Aggregate().ID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedUserSequence(event)
+ return nil
}
-func (v *View) GetLatestUserSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return v.latestSequence(ctx, userTable, instanceID)
-}
-
-func (v *View) GetLatestUserSequences(ctx context.Context, instanceIDs []string) ([]*repository.CurrentSequence, error) {
- return v.latestSequences(ctx, userTable, instanceIDs)
-}
-
-func (v *View) ProcessedUserSequence(event *models.Event) error {
- return v.saveCurrentSequence(userTable, event)
-}
-
-func (v *View) UpdateUserSpoolerRunTimestamp(instanceIDs []string) error {
- return v.updateSpoolerRunSequence(userTable, instanceIDs)
-}
-
-func (v *View) GetLatestUserFailedEvent(sequence uint64, instanceID string) (*repository.FailedEvent, error) {
- return v.latestFailedEvent(userTable, instanceID, sequence)
-}
-
-func (v *View) ProcessedUserFailedEvent(failedEvent *repository.FailedEvent) error {
- return v.saveFailedEvent(failedEvent)
+func (v *View) GetLatestUserSequence(ctx context.Context, instanceID string) (_ *query.CurrentState, err error) {
+ q := &query.CurrentStateSearchQueries{
+ Queries: make([]query.SearchQuery, 2),
+ }
+ q.Queries[0], err = query.NewCurrentStatesInstanceIDSearchQuery(instanceID)
+ if err != nil {
+ return nil, err
+ }
+ q.Queries[1], err = query.NewCurrentStatesProjectionSearchQuery(userTable)
+ if err != nil {
+ return nil, err
+ }
+ states, err := v.query.SearchCurrentStates(ctx, q)
+ if err != nil || states.SearchResponse.Count == 0 {
+ return nil, err
+ }
+ return states.CurrentStates[0], nil
}
diff --git a/internal/auth/repository/eventsourcing/view/user_session.go b/internal/auth/repository/eventsourcing/view/user_session.go
index 4e3803e77b..5303b0deab 100644
--- a/internal/auth/repository/eventsourcing/view/user_session.go
+++ b/internal/auth/repository/eventsourcing/view/user_session.go
@@ -4,10 +4,10 @@ import (
"context"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/user/repository/view"
"github.com/zitadel/zitadel/internal/user/repository/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
)
const (
@@ -34,66 +34,53 @@ func (v *View) ActiveUserSessionsCount() (uint64, error) {
return view.ActiveUserSessions(v.Db, userSessionTable)
}
-func (v *View) PutUserSession(userSession *model.UserSessionView, event *models.Event) error {
- err := view.PutUserSession(v.Db, userSessionTable, userSession)
- if err != nil {
- return err
- }
- return v.ProcessedUserSessionSequence(event)
+func (v *View) PutUserSession(userSession *model.UserSessionView) error {
+ return view.PutUserSession(v.Db, userSessionTable, userSession)
}
-func (v *View) PutUserSessions(userSession []*model.UserSessionView, event *models.Event) error {
- err := view.PutUserSessions(v.Db, userSessionTable, userSession...)
- if err != nil {
- return err
- }
- return v.ProcessedUserSessionSequence(event)
+func (v *View) PutUserSessions(userSession []*model.UserSessionView) error {
+ return view.PutUserSessions(v.Db, userSessionTable, userSession...)
}
-func (v *View) DeleteUserSessions(userID, instanceID string, event *models.Event) error {
+func (v *View) DeleteUserSessions(userID, instanceID string) error {
err := view.DeleteUserSessions(v.Db, userSessionTable, userID, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedUserSessionSequence(event)
+ return nil
}
-func (v *View) DeleteInstanceUserSessions(event *models.Event) error {
- err := view.DeleteInstanceUserSessions(v.Db, userSessionTable, event.InstanceID)
+func (v *View) DeleteInstanceUserSessions(instanceID string) error {
+ err := view.DeleteInstanceUserSessions(v.Db, userSessionTable, instanceID)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedUserSessionSequence(event)
+ return nil
}
-func (v *View) DeleteOrgUserSessions(event *models.Event) error {
- err := view.DeleteOrgUserSessions(v.Db, userSessionTable, event.InstanceID, event.ResourceOwner)
+func (v *View) DeleteOrgUserSessions(event eventstore.Event) error {
+ err := view.DeleteOrgUserSessions(v.Db, userSessionTable, event.Aggregate().InstanceID, event.Aggregate().ResourceOwner)
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedUserSessionSequence(event)
+ return nil
}
-func (v *View) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return v.latestSequence(ctx, userSessionTable, instanceID)
-}
-
-func (v *View) GetLatestUserSessionSequences(ctx context.Context, instanceIDs []string) ([]*repository.CurrentSequence, error) {
- return v.latestSequences(ctx, userSessionTable, instanceIDs)
-}
-
-func (v *View) ProcessedUserSessionSequence(event *models.Event) error {
- return v.saveCurrentSequence(userSessionTable, event)
-}
-
-func (v *View) UpdateUserSessionSpoolerRunTimestamp(instanceIDs []string) error {
- return v.updateSpoolerRunSequence(userSessionTable, instanceIDs)
-}
-
-func (v *View) GetLatestUserSessionFailedEvent(sequence uint64, instanceID string) (*repository.FailedEvent, error) {
- return v.latestFailedEvent(userSessionTable, instanceID, sequence)
-}
-
-func (v *View) ProcessedUserSessionFailedEvent(failedEvent *repository.FailedEvent) error {
- return v.saveFailedEvent(failedEvent)
+func (v *View) GetLatestUserSessionSequence(ctx context.Context, instanceID string) (_ *query.CurrentState, err error) {
+ q := &query.CurrentStateSearchQueries{
+ Queries: make([]query.SearchQuery, 2),
+ }
+ q.Queries[0], err = query.NewCurrentStatesInstanceIDSearchQuery(instanceID)
+ if err != nil {
+ return nil, err
+ }
+ q.Queries[1], err = query.NewCurrentStatesProjectionSearchQuery(userSessionTable)
+ if err != nil {
+ return nil, err
+ }
+ states, err := v.query.SearchCurrentStates(ctx, q)
+ if err != nil || states.SearchResponse.Count == 0 {
+ return nil, err
+ }
+ return states.CurrentStates[0], nil
}
diff --git a/internal/auth/repository/eventsourcing/view/view.go b/internal/auth/repository/eventsourcing/view/view.go
index 08a9014d1c..56e2676b87 100644
--- a/internal/auth/repository/eventsourcing/view/view.go
+++ b/internal/auth/repository/eventsourcing/view/view.go
@@ -8,32 +8,29 @@ import (
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
- eventstore "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/id"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/query"
)
type View struct {
Db *gorm.DB
- keyAlgorithm crypto.EncryptionAlgorithm
- idGenerator id.Generator
- query *query.Queries
- es eventstore.Eventstore
client *database.DB
+ keyAlgorithm crypto.EncryptionAlgorithm
+ query *query.Queries
+ es *eventstore.Eventstore
}
-func StartView(sqlClient *database.DB, keyAlgorithm crypto.EncryptionAlgorithm, queries *query.Queries, idGenerator id.Generator, es eventstore.Eventstore) (*View, error) {
+func StartView(sqlClient *database.DB, keyAlgorithm crypto.EncryptionAlgorithm, queries *query.Queries, es *eventstore.Eventstore) (*View, error) {
gorm, err := gorm.Open("postgres", sqlClient.DB)
if err != nil {
return nil, err
}
return &View{
Db: gorm,
+ client: sqlClient,
keyAlgorithm: keyAlgorithm,
- idGenerator: idGenerator,
query: queries,
es: es,
- client: sqlClient,
}, nil
}
diff --git a/internal/auth/repository/token.go b/internal/auth/repository/token.go
index a448a5f4ed..5a4d4fae79 100644
--- a/internal/auth/repository/token.go
+++ b/internal/auth/repository/token.go
@@ -7,6 +7,5 @@ import (
)
type TokenRepository interface {
- IsTokenValid(ctx context.Context, userID, tokenID string) (bool, error)
TokenByIDs(ctx context.Context, userID, tokenID string) (*usr_model.TokenView, error)
}
diff --git a/internal/authz/authz.go b/internal/authz/authz.go
index 6106d8a4e5..cfd034de16 100644
--- a/internal/authz/authz.go
+++ b/internal/authz/authz.go
@@ -5,9 +5,10 @@ import (
"github.com/zitadel/zitadel/internal/authz/repository/eventsourcing"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/query"
)
-func Start(queries *query.Queries, dbClient *database.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, externalSecure, allowOrderByCreationDate bool) (repository.Repository, error) {
- return eventsourcing.Start(queries, dbClient, keyEncryptionAlgorithm, externalSecure, allowOrderByCreationDate)
+func Start(queries *query.Queries, es *eventstore.Eventstore, dbClient *database.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, externalSecure bool) (repository.Repository, error) {
+ return eventsourcing.Start(queries, es, dbClient, keyEncryptionAlgorithm, externalSecure)
}
diff --git a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go
index f8ca3bf76d..d67b2dcc7b 100644
--- a/internal/authz/repository/eventsourcing/eventstore/token_verifier.go
+++ b/internal/authz/repository/eventsourcing/eventstore/token_verifier.go
@@ -19,8 +19,7 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
usr_model "github.com/zitadel/zitadel/internal/user/model"
@@ -30,7 +29,7 @@ import (
type TokenVerifierRepo struct {
TokenVerificationKey crypto.EncryptionAlgorithm
- Eventstore v1.Eventstore
+ Eventstore *eventstore.Eventstore
View *view.View
Query *query.Queries
ExternalSecure bool
@@ -48,7 +47,7 @@ func (repo *TokenVerifierRepo) tokenByID(ctx context.Context, tokenID, userID st
// always load the latest sequence first, so in case the token was not found by id,
// the sequence will be equal or lower than the actual projection and no events are lost
- sequence, err := repo.View.GetLatestTokenSequence(ctx, instanceID)
+ sequence, err := repo.View.GetLatestState(ctx)
logging.WithFields("instanceID", instanceID, "userID", userID, "tokenID", tokenID).
OnError(err).
Errorf("could not get current sequence for token check")
@@ -62,7 +61,7 @@ func (repo *TokenVerifierRepo) tokenByID(ctx context.Context, tokenID, userID st
token.ID = tokenID
token.UserID = userID
if sequence != nil {
- token.Sequence = sequence.CurrentSequence
+ token.Sequence = sequence.Sequence
}
}
@@ -245,14 +244,14 @@ func (repo *TokenVerifierRepo) VerifierClientID(ctx context.Context, appName str
return clientID, app.ProjectID, nil
}
-func (repo *TokenVerifierRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64, eventTypes []models.EventType) (_ []*models.Event, err error) {
+func (repo *TokenVerifierRepo) getUserEvents(ctx context.Context, userID, instanceID string, sequence uint64, eventTypes []eventstore.EventType) (_ []eventstore.Event, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
query, err := usr_view.UserByIDQuery(userID, instanceID, sequence, eventTypes)
if err != nil {
return nil, err
}
- return repo.Eventstore.FilterEvents(ctx, query)
+ return repo.Eventstore.Filter(ctx, query)
}
// getTokenIDAndSubject returns the TokenID and Subject of both opaque tokens and JWTs
diff --git a/internal/authz/repository/eventsourcing/eventstore/user_membership.go b/internal/authz/repository/eventsourcing/eventstore/user_membership.go
index ae9cea03de..d4a86a680d 100644
--- a/internal/authz/repository/eventsourcing/eventstore/user_membership.go
+++ b/internal/authz/repository/eventsourcing/eventstore/user_membership.go
@@ -12,17 +12,18 @@ type UserMembershipRepo struct {
Queries *query.Queries
}
-func (repo *UserMembershipRepo) SearchMyMemberships(ctx context.Context, orgID string) (_ []*authz.Membership, err error) {
+func (repo *UserMembershipRepo) SearchMyMemberships(ctx context.Context, orgID string, shouldTriggerBulk bool) (_ []*authz.Membership, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
- memberships, err := repo.searchUserMemberships(ctx, orgID)
+
+ memberships, err := repo.searchUserMemberships(ctx, orgID, shouldTriggerBulk)
if err != nil {
return nil, err
}
return userMembershipsToMemberships(memberships), nil
}
-func (repo *UserMembershipRepo) searchUserMemberships(ctx context.Context, orgID string) (_ []*query.Membership, err error) {
+func (repo *UserMembershipRepo) searchUserMemberships(ctx context.Context, orgID string, shouldTriggerBulk bool) (_ []*query.Membership, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
ctxData := authz.GetCtxData(ctx)
@@ -40,7 +41,7 @@ func (repo *UserMembershipRepo) searchUserMemberships(ctx context.Context, orgID
}
memberships, err := repo.Queries.Memberships(ctx, &query.MembershipSearchQuery{
Queries: []query.SearchQuery{userIDQuery, query.Or(orgIDsQuery, grantedIDQuery)},
- }, false)
+ }, false, shouldTriggerBulk)
if err != nil {
return nil, err
}
diff --git a/internal/authz/repository/eventsourcing/repository.go b/internal/authz/repository/eventsourcing/repository.go
index 2df593f11d..66a9a59fd1 100644
--- a/internal/authz/repository/eventsourcing/repository.go
+++ b/internal/authz/repository/eventsourcing/repository.go
@@ -4,37 +4,30 @@ import (
"context"
"github.com/zitadel/zitadel/internal/authz/repository"
- "github.com/zitadel/zitadel/internal/authz/repository/eventsourcing/eventstore"
+ authz_es "github.com/zitadel/zitadel/internal/authz/repository/eventsourcing/eventstore"
authz_view "github.com/zitadel/zitadel/internal/authz/repository/eventsourcing/view"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/id"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/query"
)
type EsRepository struct {
- eventstore.UserMembershipRepo
- eventstore.TokenVerifierRepo
+ authz_es.UserMembershipRepo
+ authz_es.TokenVerifierRepo
}
-func Start(queries *query.Queries, dbClient *database.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, externalSecure, allowOrderByCreationDate bool) (repository.Repository, error) {
- es, err := v1.Start(dbClient, allowOrderByCreationDate)
- if err != nil {
- return nil, err
- }
-
- idGenerator := id.SonyFlakeGenerator()
- view, err := authz_view.StartView(dbClient, idGenerator, queries)
+func Start(queries *query.Queries, es *eventstore.Eventstore, dbClient *database.DB, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, externalSecure bool) (repository.Repository, error) {
+ view, err := authz_view.StartView(dbClient, queries)
if err != nil {
return nil, err
}
return &EsRepository{
- eventstore.UserMembershipRepo{
+ authz_es.UserMembershipRepo{
Queries: queries,
},
- eventstore.TokenVerifierRepo{
+ authz_es.TokenVerifierRepo{
TokenVerificationKey: keyEncryptionAlgorithm,
Eventstore: es,
View: view,
diff --git a/internal/authz/repository/eventsourcing/view/error_event.go b/internal/authz/repository/eventsourcing/view/error_event.go
deleted file mode 100644
index d343d5820a..0000000000
--- a/internal/authz/repository/eventsourcing/view/error_event.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package view
-
-import (
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-const (
- errTable = "auth.failed_events"
-)
-
-func (v *View) saveFailedEvent(failedEvent *repository.FailedEvent) error {
- return repository.SaveFailedEvent(v.Db, errTable, failedEvent)
-}
-
-func (v *View) latestFailedEvent(viewName, instanceID string, sequence uint64) (*repository.FailedEvent, error) {
- return repository.LatestFailedEvent(v.Db, errTable, viewName, instanceID, sequence)
-}
diff --git a/internal/authz/repository/eventsourcing/view/sequence.go b/internal/authz/repository/eventsourcing/view/sequence.go
deleted file mode 100644
index 18b577c0cd..0000000000
--- a/internal/authz/repository/eventsourcing/view/sequence.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package view
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-const (
- sequencesTable = "auth.current_sequences"
-)
-
-func (v *View) saveCurrentSequence(viewName string, event *models.Event) error {
- return repository.SaveCurrentSequence(v.Db, sequencesTable, viewName, event.InstanceID, event.Sequence, event.CreationDate)
-}
-
-func (v *View) latestSequence(ctx context.Context, viewName, instanceID string) (*repository.CurrentSequence, error) {
- return repository.LatestSequence(v.Db, v.TimeTravel(ctx, sequencesTable), viewName, instanceID)
-}
diff --git a/internal/authz/repository/eventsourcing/view/token.go b/internal/authz/repository/eventsourcing/view/token.go
index cfd0c8b9cf..20baf22747 100644
--- a/internal/authz/repository/eventsourcing/view/token.go
+++ b/internal/authz/repository/eventsourcing/view/token.go
@@ -3,11 +3,12 @@ package view
import (
"context"
+ "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/query"
usr_view "github.com/zitadel/zitadel/internal/user/repository/view"
usr_view_model "github.com/zitadel/zitadel/internal/user/repository/view/model"
- "github.com/zitadel/zitadel/internal/view/repository"
)
const (
@@ -19,11 +20,7 @@ func (v *View) TokenByIDs(tokenID, userID, instanceID string) (*usr_view_model.T
}
func (v *View) PutToken(token *usr_view_model.TokenView, event *models.Event) error {
- err := usr_view.PutToken(v.Db, tokenTable, token)
- if err != nil {
- return err
- }
- return v.ProcessedTokenSequence(event)
+ return usr_view.PutToken(v.Db, tokenTable, token)
}
func (v *View) DeleteToken(tokenID, instanceID string, event *models.Event) error {
@@ -31,7 +28,7 @@ func (v *View) DeleteToken(tokenID, instanceID string, event *models.Event) erro
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
func (v *View) DeleteSessionTokens(agentID, userID, instanceID string, event *models.Event) error {
@@ -39,13 +36,24 @@ func (v *View) DeleteSessionTokens(agentID, userID, instanceID string, event *mo
if err != nil && !errors.IsNotFound(err) {
return err
}
- return v.ProcessedTokenSequence(event)
+ return nil
}
-func (v *View) GetLatestTokenSequence(ctx context.Context, instanceID string) (*repository.CurrentSequence, error) {
- return v.latestSequence(ctx, tokenTable, instanceID)
-}
-
-func (v *View) ProcessedTokenSequence(event *models.Event) error {
- return v.saveCurrentSequence(tokenTable, event)
+func (v *View) GetLatestState(ctx context.Context) (_ *query.CurrentState, err error) {
+ q := &query.CurrentStateSearchQueries{
+ Queries: make([]query.SearchQuery, 2),
+ }
+ q.Queries[0], err = query.NewCurrentStatesInstanceIDSearchQuery(authz.GetInstance(ctx).InstanceID())
+ if err != nil {
+ return nil, err
+ }
+ q.Queries[1], err = query.NewCurrentStatesProjectionSearchQuery(tokenTable)
+ if err != nil {
+ return nil, err
+ }
+ states, err := v.Query.SearchCurrentStates(ctx, q)
+ if err != nil || states.SearchResponse.Count == 0 {
+ return nil, err
+ }
+ return states.CurrentStates[0], nil
}
diff --git a/internal/authz/repository/eventsourcing/view/view.go b/internal/authz/repository/eventsourcing/view/view.go
index 0b07cd2e0d..f25b764f53 100644
--- a/internal/authz/repository/eventsourcing/view/view.go
+++ b/internal/authz/repository/eventsourcing/view/view.go
@@ -7,27 +7,24 @@ import (
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/query"
)
type View struct {
- Db *gorm.DB
- Query *query.Queries
- idGenerator id.Generator
- client *database.DB
+ Db *gorm.DB
+ client *database.DB
+ Query *query.Queries
}
-func StartView(sqlClient *database.DB, idGenerator id.Generator, queries *query.Queries) (*View, error) {
+func StartView(sqlClient *database.DB, queries *query.Queries) (*View, error) {
gorm, err := gorm.Open("postgres", sqlClient.DB)
if err != nil {
return nil, err
}
return &View{
- Db: gorm,
- idGenerator: idGenerator,
- Query: queries,
- client: sqlClient,
+ Db: gorm,
+ Query: queries,
+ client: sqlClient,
}, nil
}
diff --git a/internal/authz/repository/user_membership.go b/internal/authz/repository/user_membership.go
index a1b1fc78be..9e5784210f 100644
--- a/internal/authz/repository/user_membership.go
+++ b/internal/authz/repository/user_membership.go
@@ -7,5 +7,5 @@ import (
)
type UserMembershipRepository interface {
- SearchMyMemberships(ctx context.Context, orgID string) ([]*authz.Membership, error)
+ SearchMyMemberships(ctx context.Context, orgID string, shouldTriggerBulk bool) ([]*authz.Membership, error)
}
diff --git a/internal/command/auth_request_test.go b/internal/command/auth_request_test.go
index 9e6bf8328d..0c1bb1cf31 100644
--- a/internal/command/auth_request_test.go
+++ b/internal/command/auth_request_test.go
@@ -13,7 +13,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/authrequest"
@@ -77,29 +76,26 @@ func TestCommands_AddAuthRequest(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- authrequest.NewAddedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
- "loginClient",
- "clientID",
- "redirectURI",
- "state",
- "nonce",
- []string{"openid"},
- []string{"audience"},
- domain.OIDCResponseTypeCode,
- &domain.OIDCCodeChallenge{
- Challenge: "challenge",
- Method: domain.CodeChallengeMethodS256,
- },
- []domain.Prompt{domain.PromptNone},
- []string{"en", "de"},
- gu.Ptr(time.Duration(0)),
- gu.Ptr("loginHint"),
- gu.Ptr("hintUserID"),
- ),
- ),
- }),
+ authrequest.NewAddedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
+ "loginClient",
+ "clientID",
+ "redirectURI",
+ "state",
+ "nonce",
+ []string{"openid"},
+ []string{"audience"},
+ domain.OIDCResponseTypeCode,
+ &domain.OIDCCodeChallenge{
+ Challenge: "challenge",
+ Method: domain.CodeChallengeMethodS256,
+ },
+ []domain.Prompt{domain.PromptNone},
+ []string{"en", "de"},
+ gu.Ptr(time.Duration(0)),
+ gu.Ptr("loginHint"),
+ gu.Ptr("hintUserID"),
+ ),
+ ),
),
idGenerator: mock.NewIDGeneratorExpectIDs(t, "id"),
},
@@ -456,15 +452,13 @@ func TestCommands_LinkSessionToAuthRequest(t *testing.T) {
),
),
expectPush(
- []*repository.Event{eventFromEventPusherWithInstanceID(
- "instanceID",
- authrequest.NewSessionLinkedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
- "sessionID",
- "userID",
- testNow,
- []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword},
- ),
- )}),
+ authrequest.NewSessionLinkedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
+ "sessionID",
+ "userID",
+ testNow,
+ []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword},
+ ),
+ ),
),
tokenVerifier: func(ctx context.Context, sessionToken, sessionID, tokenID string) (err error) {
return nil
@@ -535,15 +529,13 @@ func TestCommands_LinkSessionToAuthRequest(t *testing.T) {
),
),
expectPush(
- []*repository.Event{eventFromEventPusherWithInstanceID(
- "instanceID",
- authrequest.NewSessionLinkedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
- "sessionID",
- "userID",
- testNow,
- []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword},
- ),
- )}),
+ authrequest.NewSessionLinkedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
+ "sessionID",
+ "userID",
+ testNow,
+ []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword},
+ ),
+ ),
),
tokenVerifier: func(ctx context.Context, sessionToken, sessionID, tokenID string) (err error) {
return nil
@@ -659,11 +651,9 @@ func TestCommands_FailAuthRequest(t *testing.T) {
),
),
expectPush(
- []*repository.Event{eventFromEventPusherWithInstanceID(
- "instanceID",
- authrequest.NewFailedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
- domain.OIDCErrorReasonLoginRequired),
- )}),
+ authrequest.NewFailedEvent(mockCtx, &authrequest.NewAggregate("V2_id", "instanceID").Aggregate,
+ domain.OIDCErrorReasonLoginRequired),
+ ),
),
},
args{
@@ -802,11 +792,7 @@ func TestCommands_AddAuthRequestCode(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- authrequest.NewCodeAddedEvent(mockCtx, &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
- ),
- },
+ authrequest.NewCodeAddedEvent(mockCtx, &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
),
),
},
@@ -937,11 +923,7 @@ func TestCommands_ExchangeAuthCode(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- authrequest.NewCodeExchangedEvent(mockCtx, &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
- ),
- },
+ authrequest.NewCodeExchangedEvent(mockCtx, &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
),
),
},
diff --git a/internal/command/converter.go b/internal/command/converter.go
index 563500d619..0761f5e19f 100644
--- a/internal/command/converter.go
+++ b/internal/command/converter.go
@@ -16,7 +16,7 @@ func writeModelToObjectDetails(writeModel *eventstore.WriteModel) *domain.Object
func pushedEventsToObjectDetails(events []eventstore.Event) *domain.ObjectDetails {
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}
}
diff --git a/internal/command/device_auth_test.go b/internal/command/device_auth_test.go
index d0d3dd8281..7299245d44 100644
--- a/internal/command/device_auth_test.go
+++ b/internal/command/device_auth_test.go
@@ -14,7 +14,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/deviceauth"
@@ -73,16 +72,12 @@ func TestCommands_AddDeviceAuth(t *testing.T) {
name: "success",
fields: fields{
eventstore: eventstoreExpect(t, expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instance1", deviceauth.NewAddedEvent(
- ctx,
- deviceauth.NewAggregate("1999", "instance1"),
- "client_id", "123", "456", now,
- []string{"a", "b", "c"},
- )),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[0]),
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[1]),
+ deviceauth.NewAddedEvent(
+ ctx,
+ deviceauth.NewAggregate("1999", "instance1"),
+ "client_id", "123", "456", now,
+ []string{"a", "b", "c"},
+ ),
)),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "1999"),
},
@@ -103,17 +98,13 @@ func TestCommands_AddDeviceAuth(t *testing.T) {
name: "push error",
fields: fields{
eventstore: eventstoreExpect(t, expectPushFailed(pushErr,
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instance1", deviceauth.NewAddedEvent(
- ctx,
- deviceauth.NewAggregate("1999", "instance1"),
- "client_id", "123", "456", now,
- []string{"a", "b", "c"},
- )),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[0]),
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[1]),
- )),
+ deviceauth.NewAddedEvent(
+ ctx,
+ deviceauth.NewAggregate("1999", "instance1"),
+ "client_id", "123", "456", now,
+ []string{"a", "b", "c"},
+ )),
+ ),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "1999"),
},
args: args{
@@ -135,8 +126,8 @@ func TestCommands_AddDeviceAuth(t *testing.T) {
}
gotID, gotDetails, err := c.AddDeviceAuth(tt.args.ctx, tt.args.clientID, tt.args.deviceCode, tt.args.userCode, tt.args.expires, tt.args.scopes)
require.ErrorIs(t, err, tt.wantErr)
- assert.Equal(t, gotID, tt.wantID)
- assert.Equal(t, gotDetails, tt.wantDetails)
+ assert.Equal(t, tt.wantID, gotID)
+ assert.Equal(t, tt.wantDetails, gotDetails)
})
}
}
@@ -201,11 +192,9 @@ func TestCommands_ApproveDeviceAuth(t *testing.T) {
),
)),
expectPushFailed(pushErr,
- []*repository.Event{eventFromEventPusherWithInstanceID(
- "instance1", deviceauth.NewApprovedEvent(
- ctx, deviceauth.NewAggregate("1999", "instance1"), "subj",
- ),
- )},
+ deviceauth.NewApprovedEvent(
+ ctx, deviceauth.NewAggregate("1999", "instance1"), "subj",
+ ),
),
),
},
@@ -225,11 +214,11 @@ func TestCommands_ApproveDeviceAuth(t *testing.T) {
[]string{"a", "b", "c"},
),
)),
- expectPush([]*repository.Event{eventFromEventPusherWithInstanceID(
- "instance1", deviceauth.NewApprovedEvent(
+ expectPush(
+ deviceauth.NewApprovedEvent(
ctx, deviceauth.NewAggregate("1999", "instance1"), "subj",
),
- )}),
+ ),
),
},
args: args{ctx, "1999", "subj"},
@@ -310,12 +299,10 @@ func TestCommands_CancelDeviceAuth(t *testing.T) {
),
)),
expectPushFailed(pushErr,
- []*repository.Event{eventFromEventPusherWithInstanceID(
- "instance1", deviceauth.NewCanceledEvent(
- ctx, deviceauth.NewAggregate("1999", "instance1"),
- domain.DeviceAuthCanceledDenied,
- ),
- )},
+ deviceauth.NewCanceledEvent(
+ ctx, deviceauth.NewAggregate("1999", "instance1"),
+ domain.DeviceAuthCanceledDenied,
+ ),
),
),
},
@@ -335,12 +322,12 @@ func TestCommands_CancelDeviceAuth(t *testing.T) {
[]string{"a", "b", "c"},
),
)),
- expectPush([]*repository.Event{eventFromEventPusherWithInstanceID(
- "instance1", deviceauth.NewCanceledEvent(
+ expectPush(
+ deviceauth.NewCanceledEvent(
ctx, deviceauth.NewAggregate("1999", "instance1"),
domain.DeviceAuthCanceledDenied,
),
- )}),
+ ),
),
},
args: args{ctx, "1999", domain.DeviceAuthCanceledDenied},
@@ -361,12 +348,12 @@ func TestCommands_CancelDeviceAuth(t *testing.T) {
[]string{"a", "b", "c"},
),
)),
- expectPush([]*repository.Event{eventFromEventPusherWithInstanceID(
- "instance1", deviceauth.NewCanceledEvent(
+ expectPush(
+ deviceauth.NewCanceledEvent(
ctx, deviceauth.NewAggregate("1999", "instance1"),
domain.DeviceAuthCanceledExpired,
),
- )}),
+ ),
),
},
args: args{ctx, "1999", domain.DeviceAuthCanceledExpired},
@@ -423,14 +410,10 @@ func TestCommands_RemoveDeviceAuth(t *testing.T) {
),
)),
expectPushFailed(pushErr,
- []*repository.Event{eventFromEventPusherWithInstanceID(
- "instance1", deviceauth.NewRemovedEvent(
- ctx, deviceauth.NewAggregate("1999", "instance1"),
- "client_id", "123", "456",
- ),
- )},
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[0]),
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[1]),
+ deviceauth.NewRemovedEvent(
+ ctx, deviceauth.NewAggregate("1999", "instance1"),
+ "client_id", "123", "456",
+ ),
),
),
},
@@ -451,14 +434,10 @@ func TestCommands_RemoveDeviceAuth(t *testing.T) {
),
)),
expectPush(
- []*repository.Event{eventFromEventPusherWithInstanceID(
- "instance1", deviceauth.NewRemovedEvent(
- ctx, deviceauth.NewAggregate("1999", "instance1"),
- "client_id", "123", "456",
- ),
- )},
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[0]),
- uniqueConstraintsFromEventConstraintWithInstanceID("instance1", unique[1]),
+ deviceauth.NewRemovedEvent(
+ ctx, deviceauth.NewAggregate("1999", "instance1"),
+ "client_id", "123", "456",
+ ),
),
),
},
diff --git a/internal/command/idp_intent_test.go b/internal/command/idp_intent_test.go
index aeffe72eb5..4f5b35c339 100644
--- a/internal/command/idp_intent_test.go
+++ b/internal/command/idp_intent_test.go
@@ -165,19 +165,17 @@ func TestCommands_CreateIntent(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- success, _ := url.Parse("https://success.url")
- failure, _ := url.Parse("https://failure.url")
- return idpintent.NewStartedEvent(
- context.Background(),
- &idpintent.NewAggregate("id", "ro").Aggregate,
- success,
- failure,
- "idp",
- )
- }(),
- ),
+ func() eventstore.Command {
+ success, _ := url.Parse("https://success.url")
+ failure, _ := url.Parse("https://failure.url")
+ return idpintent.NewStartedEvent(
+ context.Background(),
+ &idpintent.NewAggregate("id", "ro").Aggregate,
+ success,
+ failure,
+ "idp",
+ )
+ }(),
),
),
idGenerator: mock.ExpectID(t, "id"),
@@ -545,13 +543,13 @@ func TestCommands_AuthFromProvider_SAML(t *testing.T) {
),
),
expectRandomPush(
- eventPusherToEvents(
+ []eventstore.Command{
idpintent.NewSAMLRequestEvent(
context.Background(),
&idpintent.NewAggregate("id", "ro").Aggregate,
"request",
),
- ),
+ },
),
),
},
@@ -667,8 +665,8 @@ func TestCommands_SucceedIDPIntent(t *testing.T) {
idpConfigEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- idpintent.NewSucceededEvent(
+ func() eventstore.Command {
+ event := idpintent.NewSucceededEvent(
context.Background(),
&idpintent.NewAggregate("id", "ro").Aggregate,
[]byte(`{"sub":"id","preferred_username":"username"}`),
@@ -682,8 +680,9 @@ func TestCommands_SucceedIDPIntent(t *testing.T) {
Crypted: []byte("accessToken"),
},
"idToken",
- ),
- ),
+ )
+ return event
+ }(),
),
),
},
@@ -768,21 +767,19 @@ func TestCommands_SucceedSAMLIDPIntent(t *testing.T) {
idpConfigEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- idpintent.NewSAMLSucceededEvent(
- context.Background(),
- &idpintent.NewAggregate("id", "ro").Aggregate,
- []byte(`{"sub":"id","preferred_username":"username"}`),
- "id",
- "username",
- "",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte(""),
- },
- ),
+ idpintent.NewSAMLSucceededEvent(
+ context.Background(),
+ &idpintent.NewAggregate("id", "ro").Aggregate,
+ []byte(`{"sub":"id","preferred_username":"username"}`),
+ "id",
+ "username",
+ "",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte(""),
+ },
),
),
),
@@ -808,21 +805,19 @@ func TestCommands_SucceedSAMLIDPIntent(t *testing.T) {
idpConfigEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- idpintent.NewSAMLSucceededEvent(
- context.Background(),
- &idpintent.NewAggregate("id", "ro").Aggregate,
- []byte(`{"sub":"id","preferred_username":"username"}`),
- "id",
- "username",
- "user",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte(""),
- },
- ),
+ idpintent.NewSAMLSucceededEvent(
+ context.Background(),
+ &idpintent.NewAggregate("id", "ro").Aggregate,
+ []byte(`{"sub":"id","preferred_username":"username"}`),
+ "id",
+ "username",
+ "user",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte(""),
+ },
),
),
),
@@ -880,12 +875,10 @@ func TestCommands_RequestSAMLIDPIntent(t *testing.T) {
fields{
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- idpintent.NewSAMLRequestEvent(
- context.Background(),
- &idpintent.NewAggregate("id", "ro").Aggregate,
- "request",
- ),
+ idpintent.NewSAMLRequestEvent(
+ context.Background(),
+ &idpintent.NewAggregate("id", "ro").Aggregate,
+ "request",
),
),
),
@@ -955,16 +948,14 @@ func TestCommands_SucceedLDAPIDPIntent(t *testing.T) {
idpConfigEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- idpintent.NewLDAPSucceededEvent(
- context.Background(),
- &idpintent.NewAggregate("id", "ro").Aggregate,
- []byte(`{"id":"id","preferredUsername":"username","preferredLanguage":"und"}`),
- "id",
- "username",
- "",
- map[string][]string{"id": {"id"}},
- ),
+ idpintent.NewLDAPSucceededEvent(
+ context.Background(),
+ &idpintent.NewAggregate("id", "ro").Aggregate,
+ []byte(`{"id":"id","preferredUsername":"username","preferredLanguage":"und"}`),
+ "id",
+ "username",
+ "",
+ map[string][]string{"id": {"id"}},
),
),
),
@@ -1030,12 +1021,10 @@ func TestCommands_FailIDPIntent(t *testing.T) {
fields{
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- idpintent.NewFailedEvent(
- context.Background(),
- &idpintent.NewAggregate("id", "ro").Aggregate,
- "reason",
- ),
+ idpintent.NewFailedEvent(
+ context.Background(),
+ &idpintent.NewAggregate("id", "ro").Aggregate,
+ "reason",
),
),
),
diff --git a/internal/command/idp_model.go b/internal/command/idp_model.go
index 2736087de9..b4d932fb2b 100644
--- a/internal/command/idp_model.go
+++ b/internal/command/idp_model.go
@@ -2027,7 +2027,7 @@ func (wm *IDPTypeWriteModel) Reduce() error {
return wm.WriteModel.Reduce()
}
-func (wm *IDPTypeWriteModel) reduceAdded(id string, t domain.IDPType, agg eventstore.Aggregate) {
+func (wm *IDPTypeWriteModel) reduceAdded(id string, t domain.IDPType, agg *eventstore.Aggregate) {
if wm.ID != id {
return
}
diff --git a/internal/command/instance.go b/internal/command/instance.go
index a686452372..f82252f5a3 100644
--- a/internal/command/instance.go
+++ b/internal/command/instance.go
@@ -159,10 +159,8 @@ func (s *InstanceSetup) generateIDs(idGenerator id.Generator) (err error) {
}
s.zitadel.consoleAppID, err = idGenerator.Next()
- if err != nil {
- return err
- }
- return nil
+
+ return err
}
func (c *Commands) SetUpInstance(ctx context.Context, setup *InstanceSetup) (string, string, *MachineKey, *domain.ObjectDetails, error) {
@@ -171,10 +169,6 @@ func (c *Commands) SetUpInstance(ctx context.Context, setup *InstanceSetup) (str
return "", "", nil, nil, err
}
- if err = c.eventstore.NewInstance(ctx, instanceID); err != nil {
- return "", "", nil, nil, err
- }
-
ctx = authz.SetCtxData(authz.WithRequestedDomain(authz.WithInstanceID(ctx, instanceID), c.externalDomain), authz.CtxData{OrgID: instanceID, ResourceOwner: instanceID})
orgID, err := c.idGenerator.Next()
@@ -464,7 +458,7 @@ func (c *Commands) SetUpInstance(ctx context.Context, setup *InstanceSetup) (str
return instanceID, token, machineKey, &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: orgID,
}, nil
}
@@ -695,7 +689,7 @@ func (c *Commands) RemoveInstance(ctx context.Context, id string) (*domain.Objec
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
diff --git a/internal/command/instance_custom_login_text_test.go b/internal/command/instance_custom_login_text_test.go
index e3fbe1119b..fdb47dff17 100644
--- a/internal/command/instance_custom_login_text_test.go
+++ b/internal/command/instance_custom_login_text_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -55,1328 +54,666 @@ func TestCommandSide_SetCustomIAMLoginText(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
- ),
- ),
- },
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, "LoginButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
+ ),
),
),
},
@@ -3008,1328 +2345,666 @@ func TestCommandSide_SetCustomIAMLoginText(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, language.English,
- ),
- ),
- },
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, language.English,
+ ),
+ instance.NewCustomTextRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, language.English,
+ ),
),
),
},
@@ -7029,1328 +5704,666 @@ func TestCommandSide_SetCustomIAMLoginText(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
- ),
- ),
- },
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, "LoginButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
+ ),
),
),
},
diff --git a/internal/command/instance_custom_message_text_test.go b/internal/command/instance_custom_message_text_test.go
index f09773ed25..b1c8539cab 100644
--- a/internal/command/instance_custom_message_text_test.go
+++ b/internal/command/instance_custom_message_text_test.go
@@ -7,10 +7,10 @@ import (
"github.com/stretchr/testify/assert"
"golang.org/x/text/language"
+ "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -56,76 +56,60 @@ func TestCommandSide_SetDefaultMessageText(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "Template",
- domain.MessageGreeting,
- "Greeting",
- language.English,
- ),
- ),
- eventFromEventPusher(
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "Template",
- domain.MessageSubject,
- "Subject",
- language.English,
- ),
- ),
- eventFromEventPusher(
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "Template",
- domain.MessageTitle,
- "Title",
- language.English,
- ),
- ),
- eventFromEventPusher(
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "Template",
- domain.MessagePreHeader,
- "PreHeader",
- language.English,
- ),
- ),
- eventFromEventPusher(
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "Template",
- domain.MessageText,
- "Text",
- language.English,
- ),
- ),
- eventFromEventPusher(
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "Template",
- domain.MessageButtonText,
- "ButtonText",
- language.English,
- ),
- ),
- eventFromEventPusher(
- instance.NewCustomTextSetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "Template",
- domain.MessageFooterText,
- "Footer",
- language.English,
- ),
- ),
- },
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "Template",
+ domain.MessageGreeting,
+ "Greeting",
+ language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "Template",
+ domain.MessageSubject,
+ "Subject",
+ language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "Template",
+ domain.MessageTitle,
+ "Title",
+ language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "Template",
+ domain.MessagePreHeader,
+ "PreHeader",
+ language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "Template",
+ domain.MessageText,
+ "Text",
+ language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "Template",
+ domain.MessageButtonText,
+ "ButtonText",
+ language.English,
+ ),
+ instance.NewCustomTextSetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "Template",
+ domain.MessageFooterText,
+ "Footer",
+ language.English,
+ ),
),
),
},
args: args{
- ctx: context.Background(),
+ ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
instanceID: "INSTANCE",
config: &domain.CustomMessageText{
MessageTextType: "Template",
@@ -157,10 +141,9 @@ func TestCommandSide_SetDefaultMessageText(t *testing.T) {
}
if tt.res.err != nil && !tt.res.err(err) {
t.Errorf("got wrong err: %v ", err)
+ t.FailNow()
}
- if tt.res.err == nil {
- assert.Equal(t, tt.res.want, got)
- }
+ assert.Equal(t, tt.res.want, got)
})
}
}
diff --git a/internal/command/instance_debug_notification_file_model.go b/internal/command/instance_debug_notification_file_model.go
index c07d9a79f2..c30cb7bbbc 100644
--- a/internal/command/instance_debug_notification_file_model.go
+++ b/internal/command/instance_debug_notification_file_model.go
@@ -5,9 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/repository/settings"
-
"github.com/zitadel/zitadel/internal/repository/instance"
+ "github.com/zitadel/zitadel/internal/repository/settings"
)
type InstanceDebugNotificationFileWriteModel struct {
@@ -15,11 +14,13 @@ type InstanceDebugNotificationFileWriteModel struct {
}
func NewInstanceDebugNotificationFileWriteModel(ctx context.Context) *InstanceDebugNotificationFileWriteModel {
+ instanceID := authz.GetInstance(ctx).InstanceID()
return &InstanceDebugNotificationFileWriteModel{
DebugNotificationWriteModel{
WriteModel: eventstore.WriteModel{
- AggregateID: authz.GetInstance(ctx).InstanceID(),
- ResourceOwner: authz.GetInstance(ctx).InstanceID(),
+ AggregateID: instanceID,
+ ResourceOwner: instanceID,
+ InstanceID: instanceID,
},
},
}
diff --git a/internal/command/instance_debug_notification_file_test.go b/internal/command/instance_debug_notification_file_test.go
index 375f45b142..10c75e193a 100644
--- a/internal/command/instance_debug_notification_file_test.go
+++ b/internal/command/instance_debug_notification_file_test.go
@@ -4,16 +4,15 @@ import (
"context"
"testing"
+ "github.com/stretchr/testify/assert"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/notification/channels/fs"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/settings"
-
- "github.com/stretchr/testify/assert"
)
func TestCommandSide_AddDefaultDebugNotificationProviderFile(t *testing.T) {
@@ -28,6 +27,7 @@ func TestCommandSide_AddDefaultDebugNotificationProviderFile(t *testing.T) {
want *domain.ObjectDetails
err func(error) bool
}
+ ctx := authz.WithInstanceID(context.Background(), "INSTANCE")
tests := []struct {
name string
fields fields
@@ -41,7 +41,7 @@ func TestCommandSide_AddDefaultDebugNotificationProviderFile(t *testing.T) {
t,
expectFilter(
eventFromEventPusher(
- instance.NewDebugNotificationProviderFileAddedEvent(context.Background(),
+ instance.NewDebugNotificationProviderFileAddedEvent(ctx,
&instance.NewAggregate("INSTANCE").Aggregate,
true,
),
@@ -50,7 +50,7 @@ func TestCommandSide_AddDefaultDebugNotificationProviderFile(t *testing.T) {
),
},
args: args{
- ctx: context.Background(),
+ ctx: ctx,
provider: &fs.Config{
Compact: true,
Enabled: true,
@@ -67,20 +67,15 @@ func TestCommandSide_AddDefaultDebugNotificationProviderFile(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDebugNotificationProviderFileAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- ),
- ),
- },
+ instance.NewDebugNotificationProviderFileAddedEvent(ctx,
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ ),
),
),
},
args: args{
- ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
+ ctx: authz.WithInstanceID(ctx, "INSTANCE"),
provider: &fs.Config{
Compact: true,
},
@@ -215,13 +210,8 @@ func TestCommandSide_ChangeDebugNotificationProviderFile(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- newDefaultDebugNotificationFileChangedEvent(context.Background(),
- false),
- ),
- },
+ newDefaultDebugNotificationFileChangedEvent(context.Background(),
+ false),
),
),
},
@@ -305,13 +295,8 @@ func TestCommandSide_RemoveDebugNotificationProviderFile(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDebugNotificationProviderFileRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate),
- ),
- },
+ instance.NewDebugNotificationProviderFileRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate),
),
),
},
diff --git a/internal/command/instance_debug_notification_log_model.go b/internal/command/instance_debug_notification_log_model.go
index 5b65be1970..429595c98e 100644
--- a/internal/command/instance_debug_notification_log_model.go
+++ b/internal/command/instance_debug_notification_log_model.go
@@ -5,9 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/repository/settings"
-
"github.com/zitadel/zitadel/internal/repository/instance"
+ "github.com/zitadel/zitadel/internal/repository/settings"
)
type InstanceDebugNotificationLogWriteModel struct {
@@ -15,11 +14,13 @@ type InstanceDebugNotificationLogWriteModel struct {
}
func NewInstanceDebugNotificationLogWriteModel(ctx context.Context) *InstanceDebugNotificationLogWriteModel {
+ instanceID := authz.GetInstance(ctx).InstanceID()
return &InstanceDebugNotificationLogWriteModel{
DebugNotificationWriteModel{
WriteModel: eventstore.WriteModel{
- AggregateID: authz.GetInstance(ctx).InstanceID(),
- ResourceOwner: authz.GetInstance(ctx).InstanceID(),
+ AggregateID: instanceID,
+ ResourceOwner: instanceID,
+ InstanceID: instanceID,
},
},
}
diff --git a/internal/command/instance_debug_notification_log_test.go b/internal/command/instance_debug_notification_log_test.go
index ff66ab4d69..cb7031febe 100644
--- a/internal/command/instance_debug_notification_log_test.go
+++ b/internal/command/instance_debug_notification_log_test.go
@@ -4,16 +4,15 @@ import (
"context"
"testing"
+ "github.com/stretchr/testify/assert"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/notification/channels/fs"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/settings"
-
- "github.com/stretchr/testify/assert"
)
func TestCommandSide_AddDefaultDebugNotificationProviderLog(t *testing.T) {
@@ -28,6 +27,7 @@ func TestCommandSide_AddDefaultDebugNotificationProviderLog(t *testing.T) {
want *domain.ObjectDetails
err func(error) bool
}
+ ctx := authz.WithInstanceID(context.Background(), "INSTANCE")
tests := []struct {
name string
fields fields
@@ -42,7 +42,7 @@ func TestCommandSide_AddDefaultDebugNotificationProviderLog(t *testing.T) {
expectFilter(
eventFromEventPusherWithInstanceID(
"INSTANCE",
- instance.NewDebugNotificationProviderLogAddedEvent(context.Background(),
+ instance.NewDebugNotificationProviderLogAddedEvent(ctx,
&instance.NewAggregate("INSTANCE").Aggregate,
true,
),
@@ -51,7 +51,7 @@ func TestCommandSide_AddDefaultDebugNotificationProviderLog(t *testing.T) {
),
},
args: args{
- ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
+ ctx: authz.WithInstanceID(ctx, "INSTANCE"),
provider: &fs.Config{
Compact: true,
Enabled: true,
@@ -68,20 +68,15 @@ func TestCommandSide_AddDefaultDebugNotificationProviderLog(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDebugNotificationProviderLogAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- ),
- ),
- },
+ instance.NewDebugNotificationProviderLogAddedEvent(ctx,
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ ),
),
),
},
args: args{
- ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
+ ctx: authz.WithInstanceID(ctx, "INSTANCE"),
provider: &fs.Config{
Compact: true,
},
@@ -99,20 +94,15 @@ func TestCommandSide_AddDefaultDebugNotificationProviderLog(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDebugNotificationProviderLogAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- ),
- ),
- },
+ instance.NewDebugNotificationProviderLogAddedEvent(ctx,
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ ),
),
),
},
args: args{
- ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
+ ctx: authz.WithInstanceID(ctx, "INSTANCE"),
provider: &fs.Config{
Compact: true,
Enabled: true,
@@ -156,6 +146,7 @@ func TestCommandSide_ChangeDebugNotificationProviderLog(t *testing.T) {
want *domain.ObjectDetails
err func(error) bool
}
+ ctx := authz.WithInstanceID(context.Background(), "INSTANCE")
tests := []struct {
name string
fields fields
@@ -171,7 +162,7 @@ func TestCommandSide_ChangeDebugNotificationProviderLog(t *testing.T) {
),
},
args: args{
- ctx: context.Background(),
+ ctx: ctx,
provider: &fs.Config{
Compact: true,
Enabled: true,
@@ -188,7 +179,7 @@ func TestCommandSide_ChangeDebugNotificationProviderLog(t *testing.T) {
t,
expectFilter(
eventFromEventPusher(
- instance.NewDebugNotificationProviderLogAddedEvent(context.Background(),
+ instance.NewDebugNotificationProviderLogAddedEvent(ctx,
&instance.NewAggregate("INSTANCE").Aggregate,
true,
),
@@ -197,7 +188,7 @@ func TestCommandSide_ChangeDebugNotificationProviderLog(t *testing.T) {
),
},
args: args{
- ctx: context.Background(),
+ ctx: ctx,
provider: &fs.Config{
Compact: true,
Enabled: false,
@@ -215,25 +206,20 @@ func TestCommandSide_ChangeDebugNotificationProviderLog(t *testing.T) {
expectFilter(
eventFromEventPusherWithInstanceID(
"INSTANCE",
- instance.NewDebugNotificationProviderLogAddedEvent(context.Background(),
+ instance.NewDebugNotificationProviderLogAddedEvent(ctx,
&instance.NewAggregate("INSTANCE").Aggregate,
true,
),
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- newDefaultDebugNotificationLogChangedEvent(context.Background(),
- false),
- ),
- },
+ newDefaultDebugNotificationLogChangedEvent(ctx,
+ false),
),
),
},
args: args{
- ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
+ ctx: authz.WithInstanceID(ctx, "INSTANCE"),
provider: &fs.Config{
Compact: false,
Enabled: false,
@@ -252,25 +238,20 @@ func TestCommandSide_ChangeDebugNotificationProviderLog(t *testing.T) {
t,
expectFilter(
eventFromEventPusher(
- instance.NewDebugNotificationProviderLogAddedEvent(context.Background(),
+ instance.NewDebugNotificationProviderLogAddedEvent(ctx,
&instance.NewAggregate("INSTANCE").Aggregate,
true,
),
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- newDefaultDebugNotificationLogChangedEvent(context.Background(),
- false),
- ),
- },
+ newDefaultDebugNotificationLogChangedEvent(ctx,
+ false),
),
),
},
args: args{
- ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
+ ctx: authz.WithInstanceID(ctx, "INSTANCE"),
provider: &fs.Config{
Compact: false,
Enabled: true,
@@ -313,6 +294,7 @@ func TestCommandSide_RemoveDebugNotificationProviderLog(t *testing.T) {
want *domain.ObjectDetails
err func(error) bool
}
+ ctx := authz.WithInstanceID(context.Background(), "INSTANCE")
tests := []struct {
name string
fields fields
@@ -328,7 +310,7 @@ func TestCommandSide_RemoveDebugNotificationProviderLog(t *testing.T) {
),
},
args: args{
- ctx: context.Background(),
+ ctx: ctx,
},
res: res{
err: caos_errs.IsNotFound,
@@ -342,25 +324,20 @@ func TestCommandSide_RemoveDebugNotificationProviderLog(t *testing.T) {
expectFilter(
eventFromEventPusherWithInstanceID(
"INSTANCE",
- instance.NewDebugNotificationProviderLogAddedEvent(context.Background(),
+ instance.NewDebugNotificationProviderLogAddedEvent(ctx,
&instance.NewAggregate("INSTANCE").Aggregate,
true,
),
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDebugNotificationProviderLogRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate),
- ),
- },
+ instance.NewDebugNotificationProviderLogRemovedEvent(ctx,
+ &instance.NewAggregate("INSTANCE").Aggregate),
),
),
},
args: args{
- ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
+ ctx: authz.WithInstanceID(ctx, "INSTANCE"),
},
res: res{
want: &domain.ObjectDetails{
diff --git a/internal/command/instance_domain.go b/internal/command/instance_domain.go
index cbf505bc76..02ff63d405 100644
--- a/internal/command/instance_domain.go
+++ b/internal/command/instance_domain.go
@@ -32,7 +32,7 @@ func (c *Commands) AddInstanceDomain(ctx context.Context, instanceDomain string)
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
@@ -50,7 +50,7 @@ func (c *Commands) SetPrimaryInstanceDomain(ctx context.Context, instanceDomain
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
@@ -68,7 +68,7 @@ func (c *Commands) RemoveInstanceDomain(ctx context.Context, instanceDomain stri
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
diff --git a/internal/command/instance_domain_test.go b/internal/command/instance_domain_test.go
index 90a692519f..abeab0f3b4 100644
--- a/internal/command/instance_domain_test.go
+++ b/internal/command/instance_domain_test.go
@@ -9,13 +9,11 @@ import (
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/crypto"
- "github.com/zitadel/zitadel/internal/repository/project"
-
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
+ "github.com/zitadel/zitadel/internal/repository/project"
)
func TestCommandSide_AddInstanceDomain(t *testing.T) {
@@ -167,20 +165,17 @@ func TestCommandSide_AddInstanceDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDomainAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "domain.ch",
- false,
- )),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- newOIDCAppChangedEventInstanceDomain(context.Background(), "consoleApplicationID", "projectID", "org1"),
- ),
- },
- uniqueConstraintsFromEventConstraint(instance.NewAddInstanceDomainUniqueConstraint("domain.ch")),
+ instance.NewDomainAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "domain.ch",
+ false,
+ ),
+ newOIDCAppChangedEventInstanceDomain(
+ context.Background(),
+ "consoleApplicationID",
+ "projectID",
+ "org1",
+ ),
),
),
externalSecure: true,
@@ -205,13 +200,11 @@ func TestCommandSide_AddInstanceDomain(t *testing.T) {
got, err := r.AddInstanceDomain(tt.args.ctx, tt.args.domain)
if tt.res.err == nil {
assert.NoError(t, err)
- }
- if tt.res.err != nil && !tt.res.err(err) {
+ } else if !tt.res.err(err) {
t.Errorf("got wrong err: %v ", err)
+ return
}
- if tt.res.err == nil {
- assert.Equal(t, tt.res.want, got)
- }
+ assert.Equal(t, tt.res.want, got)
})
}
}
@@ -281,14 +274,10 @@ func TestCommandSide_SetPrimaryInstanceDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDomainPrimarySetEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "domain.ch",
- )),
- },
+ instance.NewDomainPrimarySetEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "domain.ch",
+ ),
),
),
},
@@ -387,15 +376,10 @@ func TestCommandSide_RemoveInstanceDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDomainRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "domain.ch",
- )),
- },
- uniqueConstraintsFromEventConstraint(instance.NewRemoveInstanceDomainUniqueConstraint("domain.ch")),
+ instance.NewDomainRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "domain.ch",
+ ),
),
),
},
@@ -458,8 +442,12 @@ func newOIDCAppChangedEventInstanceDomain(ctx context.Context, appID, projectID,
project.ChangeRedirectURIs([]string{"https://test.ch", "https://domain.ch/ui/console/auth/callback"}),
project.ChangePostLogoutRedirectURIs([]string{"https://test.ch/logout", "https://domain.ch/ui/console/signedout"}),
}
+
+ aggregate := project.NewAggregate(projectID, resourceOwner).Aggregate
+ aggregate.InstanceID = "INSTANCE"
+
event, _ := project.NewOIDCConfigChangedEvent(ctx,
- &project.NewAggregate(projectID, resourceOwner).Aggregate,
+ &aggregate,
appID,
changes,
)
diff --git a/internal/command/instance_feature_test.go b/internal/command/instance_feature_test.go
index bf07ec2c6e..31ccb58886 100644
--- a/internal/command/instance_feature_test.go
+++ b/internal/command/instance_feature_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/feature"
@@ -81,14 +80,10 @@ func TestCommands_SetBooleanInstanceFeature(t *testing.T) {
eventstore: expectEventstore(
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- feature.NewSetEvent[feature.Boolean](context.Background(), &feature.NewAggregate("featureID", "instanceID").Aggregate,
- feature.EventTypeFromFeature(domain.FeatureLoginDefaultOrg),
- feature.Boolean{Boolean: true},
- ),
- ),
- },
+ feature.NewSetEvent[feature.Boolean](context.Background(), &feature.NewAggregate("featureID", "instanceID").Aggregate,
+ feature.EventTypeFromFeature(domain.FeatureLoginDefaultOrg),
+ feature.Boolean{Boolean: true},
+ ),
),
),
idGenerator: mock.ExpectID(t, "featureID"),
@@ -117,14 +112,10 @@ func TestCommands_SetBooleanInstanceFeature(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- feature.NewSetEvent[feature.Boolean](context.Background(), &feature.NewAggregate("featureID", "instanceID").Aggregate,
- feature.EventTypeFromFeature(domain.FeatureLoginDefaultOrg),
- feature.Boolean{Boolean: false},
- ),
- ),
- },
+ feature.NewSetEvent[feature.Boolean](context.Background(), &feature.NewAggregate("featureID", "instanceID").Aggregate,
+ feature.EventTypeFromFeature(domain.FeatureLoginDefaultOrg),
+ feature.Boolean{Boolean: false},
+ ),
),
),
},
diff --git a/internal/command/instance_idp_config_model.go b/internal/command/instance_idp_config_model.go
index 7661381f22..d41b68d981 100644
--- a/internal/command/instance_idp_config_model.go
+++ b/internal/command/instance_idp_config_model.go
@@ -21,6 +21,7 @@ func NewInstanceIDPConfigWriteModel(ctx context.Context, configID string) *Insta
WriteModel: eventstore.WriteModel{
AggregateID: authz.GetInstance(ctx).InstanceID(),
ResourceOwner: authz.GetInstance(ctx).InstanceID(),
+ InstanceID: authz.GetInstance(ctx).InstanceID(),
},
ConfigID: configID,
},
diff --git a/internal/command/instance_idp_config_test.go b/internal/command/instance_idp_config_test.go
index f83a134907..b6ff2f4a24 100644
--- a/internal/command/instance_idp_config_test.go
+++ b/internal/command/instance_idp_config_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -61,40 +60,31 @@ func TestCommandSide_AddDefaultIDPConfig(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewIDPConfigAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "config1",
- "name1",
- domain.IDPConfigTypeOIDC,
- domain.IDPConfigStylingTypeGoogle,
- true,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewIDPOIDCConfigAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "clientid1",
- "config1",
- "issuer",
- "authorization-endpoint",
- "token-endpoint",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("secret"),
- },
- domain.OIDCMappingFieldEmail,
- domain.OIDCMappingFieldEmail,
- "scope",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", idpconfig.NewAddIDPConfigNameUniqueConstraint("name1", "INSTANCE")),
+ instance.NewIDPConfigAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "config1",
+ "name1",
+ domain.IDPConfigTypeOIDC,
+ domain.IDPConfigStylingTypeGoogle,
+ true,
+ ),
+ instance.NewIDPOIDCConfigAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "clientid1",
+ "config1",
+ "issuer",
+ "authorization-endpoint",
+ "token-endpoint",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("secret"),
+ },
+ domain.OIDCMappingFieldEmail,
+ domain.OIDCMappingFieldEmail,
+ "scope",
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "config1"),
@@ -139,31 +129,22 @@ func TestCommandSide_AddDefaultIDPConfig(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewIDPConfigAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "config1",
- "name1",
- domain.IDPConfigTypeOIDC,
- domain.IDPConfigStylingTypeGoogle,
- false,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewIDPJWTConfigAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "config1",
- "jwt-endpoint",
- "issuer",
- "keys-endpoint",
- "auth",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", idpconfig.NewAddIDPConfigNameUniqueConstraint("name1", "INSTANCE")),
+ instance.NewIDPConfigAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "config1",
+ "name1",
+ domain.IDPConfigTypeOIDC,
+ domain.IDPConfigStylingTypeGoogle,
+ false,
+ ),
+ instance.NewIDPJWTConfigAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "config1",
+ "jwt-endpoint",
+ "issuer",
+ "keys-endpoint",
+ "auth",
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "config1"),
@@ -305,13 +286,7 @@ func TestCommandSide_ChangeDefaultIDPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultIDPConfigChangedEvent(context.Background(), "config1", "name1", "name2", domain.IDPConfigStylingTypeUnspecified, false),
- ),
- },
- uniqueConstraintsFromEventConstraint(idpconfig.NewRemoveIDPConfigNameUniqueConstraint("name1", "INSTANCE")),
- uniqueConstraintsFromEventConstraint(idpconfig.NewAddIDPConfigNameUniqueConstraint("name2", "INSTANCE")),
+ newDefaultIDPConfigChangedEvent(context.Background(), "config1", "name1", "name2", domain.IDPConfigStylingTypeUnspecified, false),
),
),
},
@@ -329,6 +304,7 @@ func TestCommandSide_ChangeDefaultIDPConfig(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
IDPConfigID: "config1",
Name: "name2",
diff --git a/internal/command/instance_idp_jwt_config_test.go b/internal/command/instance_idp_jwt_config_test.go
index ab67124c56..23b67d1ba0 100644
--- a/internal/command/instance_idp_jwt_config_test.go
+++ b/internal/command/instance_idp_jwt_config_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
"github.com/zitadel/zitadel/internal/repository/instance"
@@ -194,17 +193,13 @@ func TestCommandSide_ChangeDefaultIDPJWTConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultIDPJWTConfigChangedEvent(context.Background(),
- "config1",
- "jwt-endpoint-changed",
- "issuer-changed",
- "keys-endpoint-changed",
- "auth-changed",
- ),
- ),
- },
+ newDefaultIDPJWTConfigChangedEvent(context.Background(),
+ "config1",
+ "jwt-endpoint-changed",
+ "issuer-changed",
+ "keys-endpoint-changed",
+ "auth-changed",
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -225,6 +220,7 @@ func TestCommandSide_ChangeDefaultIDPJWTConfig(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
IDPConfigID: "config1",
JWTEndpoint: "jwt-endpoint-changed",
diff --git a/internal/command/instance_idp_oidc_config_test.go b/internal/command/instance_idp_oidc_config_test.go
index c6b074d354..c39bd442fe 100644
--- a/internal/command/instance_idp_oidc_config_test.go
+++ b/internal/command/instance_idp_oidc_config_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
"github.com/zitadel/zitadel/internal/repository/instance"
@@ -224,26 +223,22 @@ func TestCommandSide_ChangeDefaultIDPOIDCConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultIDPOIDCConfigChangedEvent(context.Background(),
- "config1",
- "clientid-changed",
- "issuer-changed",
- "authorization-endpoint-changed",
- "token-endpoint-changed",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("secret-changed"),
- },
- domain.OIDCMappingFieldPreferredLoginName,
- domain.OIDCMappingFieldPreferredLoginName,
- []string{"scope", "scope2"},
- ),
- ),
- },
+ newDefaultIDPOIDCConfigChangedEvent(context.Background(),
+ "config1",
+ "clientid-changed",
+ "issuer-changed",
+ "authorization-endpoint-changed",
+ "token-endpoint-changed",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("secret-changed"),
+ },
+ domain.OIDCMappingFieldPreferredLoginName,
+ domain.OIDCMappingFieldPreferredLoginName,
+ []string{"scope", "scope2"},
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -268,6 +263,7 @@ func TestCommandSide_ChangeDefaultIDPOIDCConfig(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
IDPConfigID: "config1",
ClientID: "clientid-changed",
diff --git a/internal/command/instance_idp_test.go b/internal/command/instance_idp_test.go
index a0be4798c6..3e45d82666 100644
--- a/internal/command/instance_idp_test.go
+++ b/internal/command/instance_idp_test.go
@@ -15,7 +15,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errors "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/idp"
@@ -188,27 +187,23 @@ func TestCommandSide_AddInstanceGenericOAuthIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewOAuthIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- "idAttribute",
- nil,
- idp.Options{},
- )),
- },
+ instance.NewOAuthIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ "idAttribute",
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -237,32 +232,28 @@ func TestCommandSide_AddInstanceGenericOAuthIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewOAuthIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- "idAttribute",
- []string{"user"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewOAuthIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ "idAttribute",
+ []string{"user"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -556,39 +547,34 @@ func TestCommandSide_UpdateInstanceGenericOAuthIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewOAuthIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.OAuthIDPChanges{
- idp.ChangeOAuthName("new name"),
- idp.ChangeOAuthClientID("clientID2"),
- idp.ChangeOAuthClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeOAuthAuthorizationEndpoint("new auth"),
- idp.ChangeOAuthTokenEndpoint("new token"),
- idp.ChangeOAuthUserEndpoint("new user"),
- idp.ChangeOAuthScopes([]string{"openid", "profile"}),
- idp.ChangeOAuthIDAttribute("newAttribute"),
- idp.ChangeOAuthOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewOAuthIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.OAuthIDPChanges{
+ idp.ChangeOAuthName("new name"),
+ idp.ChangeOAuthClientID("clientID2"),
+ idp.ChangeOAuthClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeOAuthAuthorizationEndpoint("new auth"),
+ idp.ChangeOAuthTokenEndpoint("new token"),
+ idp.ChangeOAuthUserEndpoint("new user"),
+ idp.ChangeOAuthScopes([]string{"openid", "profile"}),
+ idp.ChangeOAuthIDAttribute("newAttribute"),
+ idp.ChangeOAuthOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -738,25 +724,21 @@ func TestCommandSide_AddInstanceGenericOIDCIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewOIDCIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- false,
- idp.Options{},
- )),
- },
+ instance.NewOIDCIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ false,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -782,30 +764,26 @@ func TestCommandSide_AddInstanceGenericOIDCIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewOIDCIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{openid.ScopeOpenID},
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewOIDCIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{openid.ScopeOpenID},
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -1024,37 +1002,32 @@ func TestCommandSide_UpdateInstanceGenericOIDCIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewOIDCIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.OIDCIDPChanges{
- idp.ChangeOIDCName("new name"),
- idp.ChangeOIDCIssuer("new issuer"),
- idp.ChangeOIDCClientID("clientID2"),
- idp.ChangeOIDCClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeOIDCScopes([]string{"openid", "profile"}),
- idp.ChangeOIDCIsIDTokenMapping(true),
- idp.ChangeOIDCOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewOIDCIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.OIDCIDPChanges{
+ idp.ChangeOIDCName("new name"),
+ idp.ChangeOIDCIssuer("new issuer"),
+ idp.ChangeOIDCClientID("clientID2"),
+ idp.ChangeOIDCClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeOIDCScopes([]string{"openid", "profile"}),
+ idp.ChangeOIDCIsIDTokenMapping(true),
+ idp.ChangeOIDCOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1216,29 +1189,24 @@ func TestCommandSide_MigrateInstanceGenericOIDCToAzureADProvider(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- event := instance.NewOIDCIDPMigratedAzureADEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- "",
- false,
- idp.Options{},
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ event := instance.NewOIDCIDPMigratedAzureADEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ "",
+ false,
+ idp.Options{},
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1279,34 +1247,29 @@ func TestCommandSide_MigrateInstanceGenericOIDCToAzureADProvider(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- event := instance.NewOIDCIDPMigratedAzureADEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- "tenant",
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ event := instance.NewOIDCIDPMigratedAzureADEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ "tenant",
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1448,23 +1411,19 @@ func TestCommandSide_MigrateInstanceOIDCToGoogleIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewOIDCIDPMigratedGoogleEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
- },
+ instance.NewOIDCIDPMigratedGoogleEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1504,28 +1463,24 @@ func TestCommandSide_MigrateInstanceOIDCToGoogleIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewOIDCIDPMigratedGoogleEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewOIDCIDPMigratedGoogleEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1650,25 +1605,21 @@ func TestCommandSide_AddInstanceAzureADIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewAzureADIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- "",
- false,
- idp.Options{},
- )),
- },
+ instance.NewAzureADIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ "",
+ false,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -1693,30 +1644,26 @@ func TestCommandSide_AddInstanceAzureADIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewAzureADIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- "tenant",
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewAzureADIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ "tenant",
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -1914,37 +1861,32 @@ func TestCommandSide_UpdateInstanceAzureADIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewAzureADIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.AzureADIDPChanges{
- idp.ChangeAzureADName("new name"),
- idp.ChangeAzureADClientID("new clientID"),
- idp.ChangeAzureADClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new clientSecret"),
- }),
- idp.ChangeAzureADScopes([]string{"openid", "profile"}),
- idp.ChangeAzureADTenant("new tenant"),
- idp.ChangeAzureADIsEmailVerified(true),
- idp.ChangeAzureADOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewAzureADIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.AzureADIDPChanges{
+ idp.ChangeAzureADName("new name"),
+ idp.ChangeAzureADClientID("new clientID"),
+ idp.ChangeAzureADClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new clientSecret"),
+ }),
+ idp.ChangeAzureADScopes([]string{"openid", "profile"}),
+ idp.ChangeAzureADTenant("new tenant"),
+ idp.ChangeAzureADIsEmailVerified(true),
+ idp.ChangeAzureADOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -2053,23 +1995,19 @@ func TestCommandSide_AddInstanceGitHubIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitHubIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
- },
+ instance.NewGitHubIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2093,28 +2031,24 @@ func TestCommandSide_AddInstanceGitHubIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitHubIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewGitHubIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2286,35 +2220,30 @@ func TestCommandSide_UpdateInstanceGitHubIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewGitHubIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.GitHubIDPChanges{
- idp.ChangeGitHubName("new name"),
- idp.ChangeGitHubClientID("new clientID"),
- idp.ChangeGitHubClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new clientSecret"),
- }),
- idp.ChangeGitHubScopes([]string{"openid", "profile"}),
- idp.ChangeGitHubOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewGitHubIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.GitHubIDPChanges{
+ idp.ChangeGitHubName("new name"),
+ idp.ChangeGitHubClientID("new clientID"),
+ idp.ChangeGitHubClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new clientSecret"),
+ }),
+ idp.ChangeGitHubScopes([]string{"openid", "profile"}),
+ idp.ChangeGitHubOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -2503,26 +2432,22 @@ func TestCommandSide_AddInstanceGitHubEnterpriseIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- nil,
- idp.Options{},
- )),
- },
+ instance.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2550,31 +2475,27 @@ func TestCommandSide_AddInstanceGitHubEnterpriseIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- []string{"user"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ []string{"user"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2841,38 +2762,33 @@ func TestCommandSide_UpdateInstanceGitHubEnterpriseIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewGitHubEnterpriseIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.GitHubEnterpriseIDPChanges{
- idp.ChangeGitHubEnterpriseName("new name"),
- idp.ChangeGitHubEnterpriseClientID("clientID2"),
- idp.ChangeGitHubEnterpriseClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGitHubEnterpriseAuthorizationEndpoint("new auth"),
- idp.ChangeGitHubEnterpriseTokenEndpoint("new token"),
- idp.ChangeGitHubEnterpriseUserEndpoint("new user"),
- idp.ChangeGitHubEnterpriseScopes([]string{"openid", "profile"}),
- idp.ChangeGitHubEnterpriseOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewGitHubEnterpriseIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.GitHubEnterpriseIDPChanges{
+ idp.ChangeGitHubEnterpriseName("new name"),
+ idp.ChangeGitHubEnterpriseClientID("clientID2"),
+ idp.ChangeGitHubEnterpriseClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGitHubEnterpriseAuthorizationEndpoint("new auth"),
+ idp.ChangeGitHubEnterpriseTokenEndpoint("new token"),
+ idp.ChangeGitHubEnterpriseUserEndpoint("new user"),
+ idp.ChangeGitHubEnterpriseScopes([]string{"openid", "profile"}),
+ idp.ChangeGitHubEnterpriseOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -2982,23 +2898,19 @@ func TestCommandSide_AddInstanceGitLabIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitLabIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
- },
+ instance.NewGitLabIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3022,28 +2934,24 @@ func TestCommandSide_AddInstanceGitLabIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitLabIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewGitLabIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3214,34 +3122,29 @@ func TestCommandSide_UpdateInstanceGitLabIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewGitLabIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.GitLabIDPChanges{
- idp.ChangeGitLabClientID("clientID2"),
- idp.ChangeGitLabClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGitLabScopes([]string{"openid", "profile"}),
- idp.ChangeGitLabOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewGitLabIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.GitLabIDPChanges{
+ idp.ChangeGitLabClientID("clientID2"),
+ idp.ChangeGitLabClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGitLabScopes([]string{"openid", "profile"}),
+ idp.ChangeGitLabOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -3386,24 +3289,20 @@ func TestCommandSide_AddInstanceGitLabSelfHostedIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
- },
+ instance.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3429,29 +3328,25 @@ func TestCommandSide_AddInstanceGitLabSelfHostedIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3667,36 +3562,31 @@ func TestCommandSide_UpdateInstanceGitLabSelfHostedIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewGitLabSelfHostedIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.GitLabSelfHostedIDPChanges{
- idp.ChangeGitLabSelfHostedClientID("clientID2"),
- idp.ChangeGitLabSelfHostedIssuer("newIssuer"),
- idp.ChangeGitLabSelfHostedName("newName"),
- idp.ChangeGitLabSelfHostedClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGitLabSelfHostedScopes([]string{"openid", "profile"}),
- idp.ChangeGitLabSelfHostedOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewGitLabSelfHostedIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.GitLabSelfHostedIDPChanges{
+ idp.ChangeGitLabSelfHostedClientID("clientID2"),
+ idp.ChangeGitLabSelfHostedIssuer("newIssuer"),
+ idp.ChangeGitLabSelfHostedName("newName"),
+ idp.ChangeGitLabSelfHostedClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGitLabSelfHostedScopes([]string{"openid", "profile"}),
+ idp.ChangeGitLabSelfHostedOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -3804,23 +3694,19 @@ func TestCommandSide_AddInstanceGoogleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGoogleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
- },
+ instance.NewGoogleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3844,28 +3730,24 @@ func TestCommandSide_AddInstanceGoogleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewGoogleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewGoogleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -4036,34 +3918,29 @@ func TestCommandSide_UpdateInstanceGoogleIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewGoogleIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.GoogleIDPChanges{
- idp.ChangeGoogleClientID("clientID2"),
- idp.ChangeGoogleClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGoogleScopes([]string{"openid", "profile"}),
- idp.ChangeGoogleOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewGoogleIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.GoogleIDPChanges{
+ idp.ChangeGoogleClientID("clientID2"),
+ idp.ChangeGoogleClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGoogleScopes([]string{"openid", "profile"}),
+ idp.ChangeGoogleOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -4298,30 +4175,26 @@ func TestCommandSide_AddInstanceLDAPIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewLDAPIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- []string{"server"},
- false,
- "baseDN",
- "dn",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- "user",
- []string{"object"},
- []string{"filter"},
- time.Second*30,
- idp.LDAPAttributes{},
- idp.Options{},
- )),
- },
+ instance.NewLDAPIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ []string{"server"},
+ false,
+ "baseDN",
+ "dn",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ "user",
+ []string{"object"},
+ []string{"filter"},
+ time.Second*30,
+ idp.LDAPAttributes{},
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -4353,49 +4226,45 @@ func TestCommandSide_AddInstanceLDAPIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewLDAPIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- []string{"server"},
- false,
- "baseDN",
- "dn",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- "user",
- []string{"object"},
- []string{"filter"},
- time.Second*30,
- idp.LDAPAttributes{
- IDAttribute: "id",
- FirstNameAttribute: "firstName",
- LastNameAttribute: "lastName",
- DisplayNameAttribute: "displayName",
- NickNameAttribute: "nickName",
- PreferredUsernameAttribute: "preferredUsername",
- EmailAttribute: "email",
- EmailVerifiedAttribute: "emailVerified",
- PhoneAttribute: "phone",
- PhoneVerifiedAttribute: "phoneVerified",
- PreferredLanguageAttribute: "preferredLanguage",
- AvatarURLAttribute: "avatarURL",
- ProfileAttribute: "profile",
- },
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewLDAPIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ []string{"server"},
+ false,
+ "baseDN",
+ "dn",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ "user",
+ []string{"object"},
+ []string{"filter"},
+ time.Second*30,
+ idp.LDAPAttributes{
+ IDAttribute: "id",
+ FirstNameAttribute: "firstName",
+ LastNameAttribute: "lastName",
+ DisplayNameAttribute: "displayName",
+ NickNameAttribute: "nickName",
+ PreferredUsernameAttribute: "preferredUsername",
+ EmailAttribute: "email",
+ EmailVerifiedAttribute: "emailVerified",
+ PhoneAttribute: "phone",
+ PhoneVerifiedAttribute: "phoneVerified",
+ PreferredLanguageAttribute: "preferredLanguage",
+ AvatarURLAttribute: "avatarURL",
+ ProfileAttribute: "profile",
+ },
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -4742,56 +4611,51 @@ func TestCommandSide_UpdateInstanceLDAPIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewLDAPIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.LDAPIDPChanges{
- idp.ChangeLDAPName("new name"),
- idp.ChangeLDAPServers([]string{"new server"}),
- idp.ChangeLDAPStartTLS(true),
- idp.ChangeLDAPBaseDN("new basedn"),
- idp.ChangeLDAPBindDN("new binddn"),
- idp.ChangeLDAPBindPassword(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new password"),
- }),
- idp.ChangeLDAPUserBase("new user"),
- idp.ChangeLDAPUserObjectClasses([]string{"new object"}),
- idp.ChangeLDAPUserFilters([]string{"new filter"}),
- idp.ChangeLDAPTimeout(time.Second * 20),
- idp.ChangeLDAPAttributes(idp.LDAPAttributeChanges{
- IDAttribute: stringPointer("new id"),
- FirstNameAttribute: stringPointer("new firstName"),
- LastNameAttribute: stringPointer("new lastName"),
- DisplayNameAttribute: stringPointer("new displayName"),
- NickNameAttribute: stringPointer("new nickName"),
- PreferredUsernameAttribute: stringPointer("new preferredUsername"),
- EmailAttribute: stringPointer("new email"),
- EmailVerifiedAttribute: stringPointer("new emailVerified"),
- PhoneAttribute: stringPointer("new phone"),
- PhoneVerifiedAttribute: stringPointer("new phoneVerified"),
- PreferredLanguageAttribute: stringPointer("new preferredLanguage"),
- AvatarURLAttribute: stringPointer("new avatarURL"),
- ProfileAttribute: stringPointer("new profile"),
- }),
- idp.ChangeLDAPOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewLDAPIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.LDAPIDPChanges{
+ idp.ChangeLDAPName("new name"),
+ idp.ChangeLDAPServers([]string{"new server"}),
+ idp.ChangeLDAPStartTLS(true),
+ idp.ChangeLDAPBaseDN("new basedn"),
+ idp.ChangeLDAPBindDN("new binddn"),
+ idp.ChangeLDAPBindPassword(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new password"),
+ }),
+ idp.ChangeLDAPUserBase("new user"),
+ idp.ChangeLDAPUserObjectClasses([]string{"new object"}),
+ idp.ChangeLDAPUserFilters([]string{"new filter"}),
+ idp.ChangeLDAPTimeout(time.Second * 20),
+ idp.ChangeLDAPAttributes(idp.LDAPAttributeChanges{
+ IDAttribute: stringPointer("new id"),
+ FirstNameAttribute: stringPointer("new firstName"),
+ LastNameAttribute: stringPointer("new lastName"),
+ DisplayNameAttribute: stringPointer("new displayName"),
+ NickNameAttribute: stringPointer("new nickName"),
+ PreferredUsernameAttribute: stringPointer("new preferredUsername"),
+ EmailAttribute: stringPointer("new email"),
+ EmailVerifiedAttribute: stringPointer("new emailVerified"),
+ PhoneAttribute: stringPointer("new phone"),
+ PhoneVerifiedAttribute: stringPointer("new phoneVerified"),
+ PreferredLanguageAttribute: stringPointer("new preferredLanguage"),
+ AvatarURLAttribute: stringPointer("new avatarURL"),
+ ProfileAttribute: stringPointer("new profile"),
+ }),
+ idp.ChangeLDAPOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -4958,25 +4822,21 @@ func TestCommandSide_AddInstanceAppleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewAppleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- "teamID",
- "keyID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("privateKey"),
- },
- nil,
- idp.Options{},
- )),
- },
+ instance.NewAppleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ "teamID",
+ "keyID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("privateKey"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5002,30 +4862,26 @@ func TestCommandSide_AddInstanceAppleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewAppleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "",
- "clientID",
- "teamID",
- "keyID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("privateKey"),
- },
- []string{"name", "email"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewAppleIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ "teamID",
+ "keyID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("privateKey"),
+ },
+ []string{"name", "email"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5243,36 +5099,31 @@ func TestCommandSide_UpdateInstanceAppleIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewAppleIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.AppleIDPChanges{
- idp.ChangeAppleClientID("clientID2"),
- idp.ChangeAppleTeamID("teamID2"),
- idp.ChangeAppleKeyID("keyID2"),
- idp.ChangeApplePrivateKey(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newPrivateKey"),
- }),
- idp.ChangeAppleScopes([]string{"name", "email"}),
- idp.ChangeAppleOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewAppleIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.AppleIDPChanges{
+ idp.ChangeAppleClientID("clientID2"),
+ idp.ChangeAppleTeamID("teamID2"),
+ idp.ChangeAppleKeyID("keyID2"),
+ idp.ChangeApplePrivateKey(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newPrivateKey"),
+ }),
+ idp.ChangeAppleScopes([]string{"name", "email"}),
+ idp.ChangeAppleOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -5381,25 +5232,21 @@ func TestCommandSide_AddInstanceSAMLIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewSAMLIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- []byte("metadata"),
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("key"),
- },
- []byte("certificate"),
- "",
- false,
- idp.Options{},
- )),
- },
+ instance.NewSAMLIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ []byte("metadata"),
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("key"),
+ },
+ []byte("certificate"),
+ "",
+ false,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5424,30 +5271,26 @@ func TestCommandSide_AddInstanceSAMLIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- instance.NewSAMLIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- "name",
- []byte("metadata"),
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("key"),
- },
- []byte("certificate"),
- "binding",
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ instance.NewSAMLIDPAddedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ "name",
+ []byte("metadata"),
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("key"),
+ },
+ []byte("certificate"),
+ "binding",
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5645,30 +5488,25 @@ func TestCommandSide_UpdateInstanceGenericSAMLIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- t := true
- event, _ := instance.NewSAMLIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.SAMLIDPChanges{
- idp.ChangeSAMLName("new name"),
- idp.ChangeSAMLMetadata([]byte("new metadata")),
- idp.ChangeSAMLBinding("new binding"),
- idp.ChangeSAMLWithSignedRequest(true),
- idp.ChangeSAMLOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := instance.NewSAMLIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.SAMLIDPChanges{
+ idp.ChangeSAMLName("new name"),
+ idp.ChangeSAMLMetadata([]byte("new metadata")),
+ idp.ChangeSAMLBinding("new binding"),
+ idp.ChangeSAMLWithSignedRequest(true),
+ idp.ChangeSAMLOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -5786,26 +5624,21 @@ func TestCommandSide_RegenerateInstanceSAMLProviderCertificate(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "instance1",
- func() eventstore.Command {
- event, _ := instance.NewSAMLIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
- "id1",
- []idp.SAMLIDPChanges{
- idp.ChangeSAMLKey(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new key"),
- }),
- idp.ChangeSAMLCertificate([]byte("new certificate")),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ event, _ := instance.NewSAMLIDPChangedEvent(context.Background(), &instance.NewAggregate("instance1").Aggregate,
+ "id1",
+ []idp.SAMLIDPChanges{
+ idp.ChangeSAMLKey(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new key"),
+ }),
+ idp.ChangeSAMLCertificate([]byte("new certificate")),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
diff --git a/internal/command/instance_member_test.go b/internal/command/instance_member_test.go
index 5307cbd39e..384fdecae4 100644
--- a/internal/command/instance_member_test.go
+++ b/internal/command/instance_member_test.go
@@ -7,16 +7,13 @@ import (
"github.com/stretchr/testify/assert"
"golang.org/x/text/language"
- "github.com/zitadel/zitadel/internal/repository/user"
-
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
- "github.com/zitadel/zitadel/internal/repository/member"
+ "github.com/zitadel/zitadel/internal/repository/user"
)
func TestCommandSide_AddIAMMember(t *testing.T) {
@@ -159,14 +156,11 @@ func TestCommandSide_AddIAMMember(t *testing.T) {
),
expectFilter(),
expectPushFailed(caos_errs.ThrowAlreadyExists(nil, "ERROR", "internal"),
- []*repository.Event{
- eventFromEventPusherWithInstanceID("INSTANCE", instance.NewMemberAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "user1",
- []string{"IAM_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", member.NewAddMemberUniqueConstraint("INSTANCE", "user1")),
+ instance.NewMemberAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "user1",
+ []string{"IAM_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -208,16 +202,11 @@ func TestCommandSide_AddIAMMember(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewMemberAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "user1",
- []string{"IAM_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", member.NewAddMemberUniqueConstraint("INSTANCE", "user1")),
+ instance.NewMemberAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "user1",
+ []string{"IAM_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -388,13 +377,11 @@ func TestCommandSide_ChangeIAMMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(instance.NewMemberChangedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "user1",
- []string{"IAM_OWNER", "IAM_OWNER_VIEWER"}...,
- )),
- },
+ instance.NewMemberChangedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "user1",
+ []string{"IAM_OWNER", "IAM_OWNER_VIEWER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -418,6 +405,7 @@ func TestCommandSide_ChangeIAMMember(t *testing.T) {
ObjectRoot: models.ObjectRoot{
ResourceOwner: "INSTANCE",
AggregateID: "INSTANCE",
+ InstanceID: "INSTANCE",
},
UserID: "user1",
Roles: []string{"IAM_OWNER", "IAM_OWNER_VIEWER"},
@@ -510,13 +498,10 @@ func TestCommandSide_RemoveIAMMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(instance.NewMemberRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "user1",
- )),
- },
- uniqueConstraintsFromEventConstraint(member.NewRemoveMemberUniqueConstraint("INSTANCE", "user1")),
+ instance.NewMemberRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "user1",
+ ),
),
),
},
diff --git a/internal/command/instance_oidc_settings.go b/internal/command/instance_oidc_settings.go
index 9ad727ebd7..c44fc3b567 100644
--- a/internal/command/instance_oidc_settings.go
+++ b/internal/command/instance_oidc_settings.go
@@ -94,7 +94,7 @@ func (c *Commands) AddOIDCSettings(ctx context.Context, settings *domain.OIDCSet
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
@@ -112,7 +112,7 @@ func (c *Commands) ChangeOIDCSettings(ctx context.Context, settings *domain.OIDC
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
diff --git a/internal/command/instance_oidc_settings_test.go b/internal/command/instance_oidc_settings_test.go
index d40d856027..ebd04982e7 100644
--- a/internal/command/instance_oidc_settings_test.go
+++ b/internal/command/instance_oidc_settings_test.go
@@ -8,11 +8,9 @@ import (
"github.com/stretchr/testify/assert"
"github.com/zitadel/zitadel/internal/api/authz"
-
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -72,19 +70,14 @@ func TestCommandSide_AddOIDCConfig(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewOIDCSettingsAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- time.Hour*1,
- time.Hour*1,
- time.Hour*1,
- time.Hour*1,
- ),
- ),
- },
+ instance.NewOIDCSettingsAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ time.Hour*1,
+ time.Hour*1,
+ time.Hour*1,
+ time.Hour*1,
+ ),
),
),
},
@@ -372,16 +365,12 @@ func TestCommandSide_ChangeOIDCConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("INSTANCE",
- newOIDCConfigChangedEvent(
- context.Background(),
- time.Hour*2,
- time.Hour*2,
- time.Hour*2,
- time.Hour*2),
- ),
- },
+ newOIDCConfigChangedEvent(
+ context.Background(),
+ time.Hour*2,
+ time.Hour*2,
+ time.Hour*2,
+ time.Hour*2),
),
),
},
diff --git a/internal/command/instance_policy_domain.go b/internal/command/instance_policy_domain.go
index 21fe2557b8..13941b6929 100644
--- a/internal/command/instance_policy_domain.go
+++ b/internal/command/instance_policy_domain.go
@@ -38,7 +38,7 @@ func (c *Commands) ChangeDefaultDomainPolicy(ctx context.Context, userLoginMustB
// returning the values of the first event as this is the one from the instance
return &domain.ObjectDetails{
Sequence: pushedEvents[0].Sequence(),
- EventDate: pushedEvents[0].CreationDate(),
+ EventDate: pushedEvents[0].CreatedAt(),
ResourceOwner: pushedEvents[0].Aggregate().ResourceOwner,
}, nil
}
diff --git a/internal/command/instance_policy_domain_test.go b/internal/command/instance_policy_domain_test.go
index e4820401e4..22bca56ef4 100644
--- a/internal/command/instance_policy_domain_test.go
+++ b/internal/command/instance_policy_domain_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -72,17 +71,12 @@ func TestCommandSide_AddDefaultDomainPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewDomainPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- true,
- true,
- ),
- ),
- },
+ instance.NewDomainPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ true,
+ true,
+ ),
),
),
},
@@ -302,33 +296,21 @@ func TestCommandSide_ChangeDefaultDomainPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("INSTANCE",
- newDefaultDomainPolicyChangedEvent(context.Background(), false, false, false),
- ),
- eventFromEventPusherWithInstanceID("INSTANCE",
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "user1",
- "user1@org1.com",
- false,
- user.UsernameChangedEventWithPolicyChange(),
- ),
- ),
- eventFromEventPusherWithInstanceID("INSTANCE",
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org3").Aggregate,
- "user1",
- "user1@org3.com",
- false,
- user.UsernameChangedEventWithPolicyChange(),
- ),
- ),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", user.NewRemoveUsernameUniqueConstraint("user1", "org1", true)),
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", user.NewAddUsernameUniqueConstraint("user1@org1.com", "org1", false)),
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", user.NewRemoveUsernameUniqueConstraint("user1", "org3", true)),
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", user.NewAddUsernameUniqueConstraint("user1@org3.com", "org3", false)),
+ newDefaultDomainPolicyChangedEvent(context.Background(), false, false, false),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "user1",
+ "user1@org1.com",
+ false,
+ user.UsernameChangedEventWithPolicyChange(),
+ ),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org3").Aggregate,
+ "user1",
+ "user1@org3.com",
+ false,
+ user.UsernameChangedEventWithPolicyChange(),
+ ),
),
),
},
diff --git a/internal/command/instance_policy_label_test.go b/internal/command/instance_policy_label_test.go
index aa2576a492..5b7b9dcbc5 100644
--- a/internal/command/instance_policy_label_test.go
+++ b/internal/command/instance_policy_label_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -98,25 +97,20 @@ func TestCommandSide_AddDefaultLabelPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLabelPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- true,
- true,
- true,
- ),
- ),
- },
+ instance.NewLabelPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ true,
+ true,
+ true,
+ ),
),
),
},
@@ -280,23 +274,19 @@ func TestCommandSide_ChangeDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultLabelPolicyChangedEvent(
- context.Background(),
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- false,
- false,
- false),
- ),
- },
+ newDefaultLabelPolicyChangedEvent(
+ context.Background(),
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ false,
+ false,
+ false),
),
),
},
@@ -321,6 +311,7 @@ func TestCommandSide_ChangeDefaultLabelPolicy(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
PrimaryColor: "#000000",
BackgroundColor: "#000000",
@@ -412,14 +403,9 @@ func TestCommandSide_ActivateDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLabelPolicyActivatedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- ),
- ),
- },
+ instance.NewLabelPolicyActivatedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ ),
),
),
},
@@ -559,14 +545,10 @@ func TestCommandSide_AddLogoDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyLogoAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "logo",
- ),
- ),
- },
+ instance.NewLabelPolicyLogoAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "logo",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -712,14 +694,10 @@ func TestCommandSide_RemoveLogoDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyLogoRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "key",
- ),
- ),
- },
+ instance.NewLabelPolicyLogoRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "key",
+ ),
),
),
},
@@ -860,14 +838,10 @@ func TestCommandSide_AddIconDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyIconAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "icon",
- ),
- ),
- },
+ instance.NewLabelPolicyIconAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "icon",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -974,14 +948,10 @@ func TestCommandSide_RemoveIconDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyIconRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "key",
- ),
- ),
- },
+ instance.NewLabelPolicyIconRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "key",
+ ),
),
),
},
@@ -1125,14 +1095,10 @@ func TestCommandSide_AddLogoDarkDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyLogoDarkAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "logo",
- ),
- ),
- },
+ instance.NewLabelPolicyLogoDarkAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "logo",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -1278,14 +1244,10 @@ func TestCommandSide_RemoveLogoDarkDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyLogoDarkRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "key",
- ),
- ),
- },
+ instance.NewLabelPolicyLogoDarkRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "key",
+ ),
),
),
},
@@ -1426,14 +1388,10 @@ func TestCommandSide_AddIconDarkDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyIconDarkAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "icon",
- ),
- ),
- },
+ instance.NewLabelPolicyIconDarkAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "icon",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -1579,14 +1537,10 @@ func TestCommandSide_RemoveIconDarkDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyIconDarkRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "key",
- ),
- ),
- },
+ instance.NewLabelPolicyIconDarkRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "key",
+ ),
),
),
},
@@ -1727,14 +1681,10 @@ func TestCommandSide_AddFontDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyFontAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "font",
- ),
- ),
- },
+ instance.NewLabelPolicyFontAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "font",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -1880,14 +1830,10 @@ func TestCommandSide_RemoveFontDefaultLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLabelPolicyFontRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "key",
- ),
- ),
- },
+ instance.NewLabelPolicyFontRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "key",
+ ),
),
),
},
diff --git a/internal/command/instance_policy_login.go b/internal/command/instance_policy_login.go
index d31c95f4c3..6e6ce70e6a 100644
--- a/internal/command/instance_policy_login.go
+++ b/internal/command/instance_policy_login.go
@@ -198,11 +198,7 @@ func (c *Commands) defaultLoginPolicyWriteModelByID(ctx context.Context, writeMo
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
- err = c.eventstore.FilterToQueryReducer(ctx, writeModel)
- if err != nil {
- return err
- }
- return nil
+ return c.eventstore.FilterToQueryReducer(ctx, writeModel)
}
func (c *Commands) getDefaultLoginPolicy(ctx context.Context) (*domain.LoginPolicy, error) {
diff --git a/internal/command/instance_policy_login_identity_provider_model.go b/internal/command/instance_policy_login_identity_provider_model.go
index 019f662814..2433aa1413 100644
--- a/internal/command/instance_policy_login_identity_provider_model.go
+++ b/internal/command/instance_policy_login_identity_provider_model.go
@@ -18,6 +18,7 @@ func NewInstanceIdentityProviderWriteModel(ctx context.Context, idpConfigID stri
WriteModel: eventstore.WriteModel{
AggregateID: authz.GetInstance(ctx).InstanceID(),
ResourceOwner: authz.GetInstance(ctx).InstanceID(),
+ InstanceID: authz.GetInstance(ctx).InstanceID(),
},
IDPConfigID: idpConfigID,
},
diff --git a/internal/command/instance_policy_login_test.go b/internal/command/instance_policy_login_test.go
index e69c6a5660..bd472da15a 100644
--- a/internal/command/instance_policy_login_test.go
+++ b/internal/command/instance_policy_login_test.go
@@ -5,17 +5,16 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
"github.com/zitadel/zitadel/internal/repository/user"
-
- "github.com/stretchr/testify/assert"
)
func TestCommandSide_ChangeDefaultLoginPolicy(t *testing.T) {
@@ -143,29 +142,24 @@ func TestCommandSide_ChangeDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- newDefaultLoginPolicyChangedEvent(context.Background(),
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- domain.PasswordlessTypeNotAllowed,
- "",
- time.Hour*10,
- time.Hour*20,
- time.Hour*30,
- time.Hour*40,
- time.Hour*50),
- ),
- },
+ newDefaultLoginPolicyChangedEvent(context.Background(),
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ domain.PasswordlessTypeNotAllowed,
+ "",
+ time.Hour*10,
+ time.Hour*20,
+ time.Hour*30,
+ time.Hour*40,
+ time.Hour*50),
),
),
},
@@ -416,14 +410,9 @@ func TestCommandSide_AddIDPProviderDefaultLoginPolicy(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewIdentityProviderAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "config1"),
- ),
- },
+ instance.NewIdentityProviderAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "config1"),
),
),
},
@@ -651,13 +640,9 @@ func TestCommandSide_RemoveIDPProviderDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewIdentityProviderRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "config1"),
- ),
- },
+ instance.NewIdentityProviderRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "config1"),
),
),
},
@@ -711,13 +696,9 @@ func TestCommandSide_RemoveIDPProviderDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewIdentityProviderRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "config1"),
- ),
- },
+ instance.NewIdentityProviderRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "config1"),
),
),
},
@@ -786,18 +767,12 @@ func TestCommandSide_RemoveIDPProviderDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewIdentityProviderRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "config1"),
- ),
- eventFromEventPusher(
- user.NewUserIDPLinkCascadeRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "config1", "externaluser1")),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUserIDPLinkUniqueConstraint("config1", "externaluser1")),
+ instance.NewIdentityProviderRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "config1"),
+ user.NewUserIDPLinkCascadeRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "config1", "externaluser1"),
),
),
},
@@ -905,14 +880,9 @@ func TestCommandSide_AddSecondFactorDefaultLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecondFactorTypeTOTP),
- ),
- },
+ instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecondFactorTypeTOTP),
),
),
},
@@ -933,14 +903,9 @@ func TestCommandSide_AddSecondFactorDefaultLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecondFactorTypeOTPEmail),
- ),
- },
+ instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecondFactorTypeOTPEmail),
),
),
},
@@ -961,14 +926,9 @@ func TestCommandSide_AddSecondFactorDefaultLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecondFactorTypeOTPSMS),
- ),
- },
+ instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecondFactorTypeOTPSMS),
),
),
},
@@ -996,14 +956,9 @@ func TestCommandSide_AddSecondFactorDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecondFactorTypeOTPSMS),
- ),
- },
+ instance.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecondFactorTypeOTPSMS),
),
),
},
@@ -1187,13 +1142,9 @@ func TestCommandSide_RemoveSecondFactorDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecondFactorTypeTOTP),
- ),
- },
+ instance.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecondFactorTypeTOTP),
),
),
},
@@ -1221,13 +1172,9 @@ func TestCommandSide_RemoveSecondFactorDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecondFactorTypeOTPEmail),
- ),
- },
+ instance.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecondFactorTypeOTPEmail),
),
),
},
@@ -1255,13 +1202,9 @@ func TestCommandSide_RemoveSecondFactorDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecondFactorTypeOTPSMS),
- ),
- },
+ instance.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecondFactorTypeOTPSMS),
),
),
},
@@ -1381,14 +1324,9 @@ func TestCommandSide_AddMultiFactorDefaultLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLoginPolicyMultiFactorAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.MultiFactorTypeU2FWithPIN),
- ),
- },
+ instance.NewLoginPolicyMultiFactorAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.MultiFactorTypeU2FWithPIN),
),
),
},
@@ -1514,13 +1452,9 @@ func TestCommandSide_RemoveMultiFactorDefaultLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewLoginPolicyMultiFactorRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.MultiFactorTypeU2FWithPIN),
- ),
- },
+ instance.NewLoginPolicyMultiFactorRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.MultiFactorTypeU2FWithPIN),
),
),
},
diff --git a/internal/command/instance_policy_mail_template_model.go b/internal/command/instance_policy_mail_template_model.go
index a7b6fcabfb..489d6ebd2b 100644
--- a/internal/command/instance_policy_mail_template_model.go
+++ b/internal/command/instance_policy_mail_template_model.go
@@ -21,6 +21,7 @@ func NewInstanceMailTemplateWriteModel(ctx context.Context) *InstanceMailTemplat
WriteModel: eventstore.WriteModel{
AggregateID: authz.GetInstance(ctx).InstanceID(),
ResourceOwner: authz.GetInstance(ctx).InstanceID(),
+ InstanceID: authz.GetInstance(ctx).InstanceID(),
},
},
}
diff --git a/internal/command/instance_policy_mail_template_test.go b/internal/command/instance_policy_mail_template_test.go
index 0ef85dabf2..3f90b1bf59 100644
--- a/internal/command/instance_policy_mail_template_test.go
+++ b/internal/command/instance_policy_mail_template_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -80,15 +79,11 @@ func TestCommandSide_AddDefaultMailTemplatePolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewMailTemplateAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- []byte("template"),
- ),
- ),
- },
+ instance.NewMailTemplateAddedEvent(
+ authz.WithInstanceID(context.Background(), "INSTANCE"),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ []byte("template"),
+ ),
),
),
},
@@ -219,11 +214,7 @@ func TestCommandSide_ChangeDefaultMailTemplatePolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultMailTemplatePolicyChangedEvent(context.Background(), []byte("template-change")),
- ),
- },
+ newDefaultMailTemplatePolicyChangedEvent(context.Background(), []byte("template-change")),
),
),
},
@@ -238,6 +229,7 @@ func TestCommandSide_ChangeDefaultMailTemplatePolicy(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
Template: []byte("template-change"),
},
diff --git a/internal/command/instance_policy_notification_test.go b/internal/command/instance_policy_notification_test.go
index b4639ae5e6..339e28fd6e 100644
--- a/internal/command/instance_policy_notification_test.go
+++ b/internal/command/instance_policy_notification_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -64,14 +63,10 @@ func TestCommandSide_AddDefaultNotificationPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewNotificationPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- ),
- ),
- },
+ instance.NewNotificationPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ ),
),
),
},
@@ -93,14 +88,10 @@ func TestCommandSide_AddDefaultNotificationPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewNotificationPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- ),
- ),
- },
+ instance.NewNotificationPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ ),
),
),
},
@@ -209,12 +200,9 @@ func TestCommandSide_ChangeDefaultNotificationPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultNotificationPolicyChangedEvent(context.Background(),
- true,
- )),
- },
+ newDefaultNotificationPolicyChangedEvent(context.Background(),
+ true,
+ ),
),
),
},
diff --git a/internal/command/instance_policy_password_age_test.go b/internal/command/instance_policy_password_age_test.go
index ac6f9bb51e..e1850fc353 100644
--- a/internal/command/instance_policy_password_age_test.go
+++ b/internal/command/instance_policy_password_age_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -67,16 +66,11 @@ func TestCommandSide_AddDefaultPasswordAgePolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewPasswordAgePolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- 365,
- 10,
- ),
- ),
- },
+ instance.NewPasswordAgePolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ 365,
+ 10,
+ ),
),
),
},
@@ -190,11 +184,7 @@ func TestCommandSide_ChangeDefaultPasswordAgePolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultPasswordAgePolicyChangedEvent(context.Background(), 125, 5),
- ),
- },
+ newDefaultPasswordAgePolicyChangedEvent(context.Background(), 125, 5),
),
),
},
@@ -210,6 +200,7 @@ func TestCommandSide_ChangeDefaultPasswordAgePolicy(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
MaxAgeDays: 125,
ExpireWarnDays: 5,
diff --git a/internal/command/instance_policy_password_complexity_test.go b/internal/command/instance_policy_password_complexity_test.go
index 3e342061b5..f696341f2d 100644
--- a/internal/command/instance_policy_password_complexity_test.go
+++ b/internal/command/instance_policy_password_complexity_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -92,16 +91,11 @@ func TestCommandSide_AddDefaultPasswordComplexityPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewPasswordComplexityPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- 8,
- true, true, true, true,
- ),
- ),
- },
+ instance.NewPasswordComplexityPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ 8,
+ true, true, true, true,
+ ),
),
),
},
@@ -245,11 +239,7 @@ func TestCommandSide_ChangeDefaultPasswordComplexityPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultPasswordComplexityPolicyChangedEvent(context.Background(), 10, false, false, false, false),
- ),
- },
+ newDefaultPasswordComplexityPolicyChangedEvent(context.Background(), 10, false, false, false, false),
),
),
},
@@ -268,6 +258,7 @@ func TestCommandSide_ChangeDefaultPasswordComplexityPolicy(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
MinLength: 10,
HasUppercase: false,
diff --git a/internal/command/instance_policy_password_lockout_test.go b/internal/command/instance_policy_password_lockout_test.go
index 07a0c77cfc..1eb0a651ab 100644
--- a/internal/command/instance_policy_password_lockout_test.go
+++ b/internal/command/instance_policy_password_lockout_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -67,16 +66,11 @@ func TestCommandSide_AddDefaultLockoutPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewLockoutPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- 10,
- true,
- ),
- ),
- },
+ instance.NewLockoutPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ 10,
+ true,
+ ),
),
),
},
@@ -190,11 +184,7 @@ func TestCommandSide_ChangeDefaultLockoutPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultLockoutPolicyChangedEvent(context.Background(), 20, false),
- ),
- },
+ newDefaultLockoutPolicyChangedEvent(context.Background(), 20, false),
),
),
},
@@ -210,6 +200,7 @@ func TestCommandSide_ChangeDefaultLockoutPolicy(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
MaxPasswordAttempts: 20,
ShowLockOutFailures: false,
diff --git a/internal/command/instance_policy_privacy_test.go b/internal/command/instance_policy_privacy_test.go
index eddf8a0c18..ad7bbfb15c 100644
--- a/internal/command/instance_policy_privacy_test.go
+++ b/internal/command/instance_policy_privacy_test.go
@@ -7,11 +7,9 @@ import (
"github.com/stretchr/testify/assert"
"github.com/zitadel/zitadel/internal/api/authz"
-
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -74,18 +72,13 @@ func TestCommandSide_AddDefaultPrivacyPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewPrivacyPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "TOSLink",
- "PrivacyLink",
- "HelpLink",
- "support@example.com",
- ),
- ),
- },
+ instance.NewPrivacyPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "TOSLink",
+ "PrivacyLink",
+ "HelpLink",
+ "support@example.com",
+ ),
),
),
},
@@ -127,18 +120,13 @@ func TestCommandSide_AddDefaultPrivacyPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewPrivacyPolicyAddedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "",
- "",
- "",
- "",
- ),
- ),
- },
+ instance.NewPrivacyPolicyAddedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "",
+ "",
+ "",
+ "",
+ ),
),
),
},
@@ -282,16 +270,12 @@ func TestCommandSide_ChangeDefaultPrivacyPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDefaultPrivacyPolicyChangedEvent(context.Background(),
- "TOSLinkChanged",
- "PrivacyLinkChanged",
- "HelpLinkChanged",
- "support2@example.com",
- ),
- ),
- },
+ newDefaultPrivacyPolicyChangedEvent(context.Background(),
+ "TOSLinkChanged",
+ "PrivacyLinkChanged",
+ "HelpLinkChanged",
+ "support2@example.com",
+ ),
),
),
},
@@ -309,6 +293,7 @@ func TestCommandSide_ChangeDefaultPrivacyPolicy(t *testing.T) {
ObjectRoot: models.ObjectRoot{
AggregateID: "INSTANCE",
ResourceOwner: "INSTANCE",
+ InstanceID: "INSTANCE",
},
TOSLink: "TOSLinkChanged",
PrivacyLink: "PrivacyLinkChanged",
diff --git a/internal/command/instance_policy_security.go b/internal/command/instance_policy_security.go
index c350946665..0222eca9fc 100644
--- a/internal/command/instance_policy_security.go
+++ b/internal/command/instance_policy_security.go
@@ -23,7 +23,7 @@ func (c *Commands) SetSecurityPolicy(ctx context.Context, enabled bool, allowedO
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
diff --git a/internal/command/instance_secret_generator_model.go b/internal/command/instance_secret_generator_model.go
index b4122edb50..8ced3104b3 100644
--- a/internal/command/instance_secret_generator_model.go
+++ b/internal/command/instance_secret_generator_model.go
@@ -28,6 +28,7 @@ func NewInstanceSecretGeneratorConfigWriteModel(ctx context.Context, GeneratorTy
WriteModel: eventstore.WriteModel{
AggregateID: authz.GetInstance(ctx).InstanceID(),
ResourceOwner: authz.GetInstance(ctx).InstanceID(),
+ InstanceID: authz.GetInstance(ctx).InstanceID(),
},
GeneratorType: GeneratorType,
}
diff --git a/internal/command/instance_settings.go b/internal/command/instance_settings.go
index 05684ed933..497bc99e14 100644
--- a/internal/command/instance_settings.go
+++ b/internal/command/instance_settings.go
@@ -25,7 +25,7 @@ func (c *Commands) AddSecretGeneratorConfig(ctx context.Context, typ domain.Secr
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: agg.ResourceOwner,
}, nil
}
diff --git a/internal/command/instance_settings_test.go b/internal/command/instance_settings_test.go
index 6b0011511d..19ca9c5d43 100644
--- a/internal/command/instance_settings_test.go
+++ b/internal/command/instance_settings_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -95,23 +94,17 @@ func TestCommandSide_AddSecretGenerator(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSecretGeneratorAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecretGeneratorTypeInitCode,
- 4,
- time.Hour*1,
- true,
- true,
- true,
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", instance.NewAddSecretGeneratorTypeUniqueConstraint(domain.SecretGeneratorTypeInitCode)),
+ instance.NewSecretGeneratorAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecretGeneratorTypeInitCode,
+ 4,
+ time.Hour*1,
+ true,
+ true,
+ true,
+ true,
+ ),
),
),
},
@@ -193,23 +186,17 @@ func TestCommandSide_ChangeSecretGenerator(t *testing.T) {
eventstore: expectEventstore(
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSecretGeneratorAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecretGeneratorTypeInitCode,
- 4,
- time.Hour*1,
- true,
- true,
- true,
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", instance.NewAddSecretGeneratorTypeUniqueConstraint(domain.SecretGeneratorTypeInitCode)),
+ instance.NewSecretGeneratorAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecretGeneratorTypeInitCode,
+ 4,
+ time.Hour*1,
+ true,
+ true,
+ true,
+ true,
+ ),
),
),
},
@@ -256,23 +243,17 @@ func TestCommandSide_ChangeSecretGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSecretGeneratorAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecretGeneratorTypeInitCode,
- 4,
- time.Hour*1,
- true,
- true,
- true,
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", instance.NewAddSecretGeneratorTypeUniqueConstraint(domain.SecretGeneratorTypeInitCode)),
+ instance.NewSecretGeneratorAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecretGeneratorTypeInitCode,
+ 4,
+ time.Hour*1,
+ true,
+ true,
+ true,
+ true,
+ ),
),
),
},
@@ -351,19 +332,15 @@ func TestCommandSide_ChangeSecretGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("INSTANCE",
- newSecretGeneratorChangedEvent(context.Background(),
- domain.SecretGeneratorTypeInitCode,
- 8,
- time.Hour*2,
- false,
- false,
- false,
- false,
- ),
- ),
- },
+ newSecretGeneratorChangedEvent(context.Background(),
+ domain.SecretGeneratorTypeInitCode,
+ 8,
+ time.Hour*2,
+ false,
+ false,
+ false,
+ false,
+ ),
),
),
},
@@ -511,14 +488,9 @@ func TestCommandSide_RemoveSecretGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewSecretGeneratorRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- domain.SecretGeneratorTypeInitCode),
- ),
- },
- uniqueConstraintsFromEventConstraint(instance.NewRemoveSecretGeneratorTypeUniqueConstraint(domain.SecretGeneratorTypeInitCode)),
+ instance.NewSecretGeneratorRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ domain.SecretGeneratorTypeInitCode),
),
),
},
diff --git a/internal/command/instance_test.go b/internal/command/instance_test.go
index 3d29804d01..18007637d9 100644
--- a/internal/command/instance_test.go
+++ b/internal/command/instance_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -133,15 +132,10 @@ func TestCommandSide_UpdateInstance(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewInstanceChangedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "INSTANCE_CHANGED",
- ),
- ),
- },
+ instance.NewInstanceChangedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "INSTANCE_CHANGED",
+ ),
),
),
},
@@ -271,22 +265,14 @@ func TestCommandSide_RemoveInstance(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewInstanceRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "INSTANCE",
- []string{
- "instance.domain",
- "custom.domain",
- },
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(instance.NewRemoveInstanceDomainUniqueConstraint("instance.domain")),
- uniqueConstraintsFromEventConstraint(instance.NewRemoveInstanceDomainUniqueConstraint("custom.domain")),
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", eventstore.NewRemoveInstanceUniqueConstraints()),
+ instance.NewInstanceRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "INSTANCE",
+ []string{
+ "instance.domain",
+ "custom.domain",
+ },
+ ),
),
),
},
diff --git a/internal/command/main_test.go b/internal/command/main_test.go
index ba886e5c4b..c830409489 100644
--- a/internal/command/main_test.go
+++ b/internal/command/main_test.go
@@ -40,7 +40,12 @@ func eventstoreExpect(t *testing.T, expects ...expect) *eventstore.Eventstore {
for _, e := range expects {
e(m)
}
- es := eventstore.NewEventstore(eventstore.TestConfig(m))
+ es := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: m.MockQuerier,
+ Pusher: m.MockPusher,
+ },
+ )
iam_repo.RegisterEventMappers(es)
org.RegisterEventMappers(es)
usr_repo.RegisterEventMappers(es)
@@ -72,89 +77,43 @@ func eventPusherToEvents(eventsPushes ...eventstore.Command) []*repository.Event
}
events[i] = &repository.Event{
AggregateID: event.Aggregate().ID,
- AggregateType: repository.AggregateType(event.Aggregate().Type),
+ AggregateType: event.Aggregate().Type,
ResourceOwner: sql.NullString{String: event.Aggregate().ResourceOwner, Valid: event.Aggregate().ResourceOwner != ""},
- EditorService: event.EditorService(),
- EditorUser: event.EditorUser(),
- Type: repository.EventType(event.Type()),
- Version: repository.Version(event.Aggregate().Version),
+ EditorUser: event.Creator(),
+ Typ: event.Type(),
+ Version: event.Aggregate().Version,
Data: data,
+ Constraints: event.UniqueConstraints(),
}
}
return events
}
-type testRepo struct {
- events []*repository.Event
- uniqueConstraints []*repository.UniqueConstraint
- sequence uint64
- err error
- t *testing.T
-}
-
-func (repo *testRepo) Health(ctx context.Context) error {
- return nil
-}
-
-func (repo *testRepo) Push(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error {
- repo.events = append(repo.events, events...)
- repo.uniqueConstraints = append(repo.uniqueConstraints, uniqueConstraints...)
- return nil
-}
-
-func (repo *testRepo) Filter(ctx context.Context, searchQuery *repository.SearchQuery) ([]*repository.Event, error) {
- events := make([]*repository.Event, 0, len(repo.events))
- for _, event := range repo.events {
- for _, filter := range searchQuery.Filters {
- for _, f := range filter {
- if f.Field == repository.FieldAggregateType {
- if event.AggregateType != f.Value {
- continue
- }
- }
- }
- }
- events = append(events, event)
- }
- return repo.events, nil
-}
-
-func filterAggregateType(aggregateType string) {
-
-}
-
-func (repo *testRepo) LatestSequence(ctx context.Context, queryFactory *repository.SearchQuery) (uint64, error) {
- if repo.err != nil {
- return 0, repo.err
- }
- return repo.sequence, nil
-}
-
-func expectPush(events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) expect {
+func expectPush(commands ...eventstore.Command) expect {
return func(m *mock.MockRepository) {
- m.ExpectPush(events, uniqueConstraints...)
+ m.ExpectPush(commands)
}
}
-func expectPushFailed(err error, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) expect {
+func expectPushFailed(err error, commands ...eventstore.Command) expect {
return func(m *mock.MockRepository) {
- m.ExpectPushFailed(err, events, uniqueConstraints...)
+ m.ExpectPushFailed(err, commands)
}
}
-func expectRandomPush(events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) expect {
+func expectRandomPush(events []eventstore.Command) expect {
return func(m *mock.MockRepository) {
- m.ExpectRandomPush(events, uniqueConstraints...)
+ m.ExpectRandomPush(events)
}
}
-func expectRandomPushFailed(err error, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) expect {
+func expectRandomPushFailed(err error, events []eventstore.Command) expect {
return func(m *mock.MockRepository) {
- m.ExpectRandomPushFailed(err, events, uniqueConstraints...)
+ m.ExpectRandomPushFailed(err, events)
}
}
-func expectFilter(events ...*repository.Event) expect {
+func expectFilter(events ...eventstore.Event) expect {
return func(m *mock.MockRepository) {
m.ExpectFilterEvents(events...)
}
@@ -180,39 +139,35 @@ func expectFilterOrgMemberNotFound() expect {
func eventFromEventPusher(event eventstore.Command) *repository.Event {
data, _ := eventstore.EventData(event)
return &repository.Event{
- ID: "",
- Sequence: 0,
- PreviousAggregateSequence: 0,
- PreviousAggregateTypeSequence: 0,
- CreationDate: time.Time{},
- Type: repository.EventType(event.Type()),
- Data: data,
- EditorService: event.EditorService(),
- EditorUser: event.EditorUser(),
- Version: repository.Version(event.Aggregate().Version),
- AggregateID: event.Aggregate().ID,
- AggregateType: repository.AggregateType(event.Aggregate().Type),
- ResourceOwner: sql.NullString{String: event.Aggregate().ResourceOwner, Valid: event.Aggregate().ResourceOwner != ""},
+ InstanceID: event.Aggregate().InstanceID,
+ ID: "",
+ Seq: 0,
+ CreationDate: time.Time{},
+ Typ: event.Type(),
+ Data: data,
+ EditorUser: event.Creator(),
+ Version: event.Aggregate().Version,
+ AggregateID: event.Aggregate().ID,
+ AggregateType: event.Aggregate().Type,
+ ResourceOwner: sql.NullString{String: event.Aggregate().ResourceOwner, Valid: event.Aggregate().ResourceOwner != ""},
+ Constraints: event.UniqueConstraints(),
}
}
func eventFromEventPusherWithInstanceID(instanceID string, event eventstore.Command) *repository.Event {
data, _ := eventstore.EventData(event)
return &repository.Event{
- ID: "",
- Sequence: 0,
- PreviousAggregateSequence: 0,
- PreviousAggregateTypeSequence: 0,
- CreationDate: time.Time{},
- Type: repository.EventType(event.Type()),
- Data: data,
- EditorService: event.EditorService(),
- EditorUser: event.EditorUser(),
- Version: repository.Version(event.Aggregate().Version),
- AggregateID: event.Aggregate().ID,
- AggregateType: repository.AggregateType(event.Aggregate().Type),
- ResourceOwner: sql.NullString{String: event.Aggregate().ResourceOwner, Valid: event.Aggregate().ResourceOwner != ""},
- InstanceID: instanceID,
+ ID: "",
+ Seq: 0,
+ CreationDate: time.Time{},
+ Typ: event.Type(),
+ Data: data,
+ EditorUser: event.Creator(),
+ Version: event.Aggregate().Version,
+ AggregateID: event.Aggregate().ID,
+ AggregateType: event.Aggregate().Type,
+ ResourceOwner: sql.NullString{String: event.Aggregate().ResourceOwner, Valid: event.Aggregate().ResourceOwner != ""},
+ InstanceID: instanceID,
}
}
@@ -222,23 +177,6 @@ func eventFromEventPusherWithCreationDateNow(event eventstore.Command) *reposito
return e
}
-func uniqueConstraintsFromEventConstraint(constraint *eventstore.EventUniqueConstraint) *repository.UniqueConstraint {
- return &repository.UniqueConstraint{
- UniqueType: constraint.UniqueType,
- UniqueField: constraint.UniqueField,
- ErrorMessage: constraint.ErrorMessage,
- Action: repository.UniqueConstraintAction(constraint.Action)}
-}
-
-func uniqueConstraintsFromEventConstraintWithInstanceID(instanceID string, constraint *eventstore.EventUniqueConstraint) *repository.UniqueConstraint {
- return &repository.UniqueConstraint{
- InstanceID: instanceID,
- UniqueType: constraint.UniqueType,
- UniqueField: constraint.UniqueField,
- ErrorMessage: constraint.ErrorMessage,
- Action: repository.UniqueConstraintAction(constraint.Action)}
-}
-
func GetMockSecretGenerator(t *testing.T) crypto.Generator {
ctrl := gomock.NewController(t)
alg := crypto.CreateMockEncryptionAlg(ctrl)
diff --git a/internal/command/oidc_session_test.go b/internal/command/oidc_session_test.go
index aba917fa24..ab850aeea1 100644
--- a/internal/command/oidc_session_test.go
+++ b/internal/command/oidc_session_test.go
@@ -16,7 +16,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/authrequest"
@@ -184,19 +183,11 @@ func TestCommands_AddOIDCSessionAccessToken(t *testing.T) {
),
expectFilter(), // token lifetime
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
- "userID", "sessionID", "clientID", []string{"audience"}, []string{"openid"}, []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword}, testNow),
- ),
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewAccessTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
- "at_accessTokenID", []string{"openid"}, time.Hour),
- ),
- eventFromEventPusherWithInstanceID("instanceID",
- authrequest.NewSucceededEvent(context.Background(), &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
- ),
- },
+ oidcsession.NewAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
+ "userID", "sessionID", "clientID", []string{"audience"}, []string{"openid"}, []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword}, testNow),
+ oidcsession.NewAccessTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
+ "at_accessTokenID", []string{"openid"}, time.Hour),
+ authrequest.NewSucceededEvent(context.Background(), &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
),
),
idGenerator: mock.NewIDGeneratorExpectIDs(t, "oidcSessionID", "accessTokenID"),
@@ -385,23 +376,13 @@ func TestCommands_AddOIDCSessionRefreshAndAccessToken(t *testing.T) {
),
expectFilter(), // token lifetime
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
- "userID", "sessionID", "clientID", []string{"audience"}, []string{"openid", "offline_access"}, []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword}, testNow),
- ),
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewAccessTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
- "at_accessTokenID", []string{"openid", "offline_access"}, time.Hour),
- ),
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewRefreshTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
- "rt_refreshTokenID", 7*24*time.Hour, 24*time.Hour),
- ),
- eventFromEventPusherWithInstanceID("instanceID",
- authrequest.NewSucceededEvent(context.Background(), &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
- ),
- },
+ oidcsession.NewAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
+ "userID", "sessionID", "clientID", []string{"audience"}, []string{"openid", "offline_access"}, []domain.UserAuthMethodType{domain.UserAuthMethodTypePassword}, testNow),
+ oidcsession.NewAccessTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
+ "at_accessTokenID", []string{"openid", "offline_access"}, time.Hour),
+ oidcsession.NewRefreshTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
+ "rt_refreshTokenID", 7*24*time.Hour, 24*time.Hour),
+ authrequest.NewSucceededEvent(context.Background(), &authrequest.NewAggregate("V2_authRequestID", "instanceID").Aggregate),
),
),
idGenerator: mock.NewIDGeneratorExpectIDs(t, "oidcSessionID", "accessTokenID", "refreshTokenID"),
@@ -575,16 +556,10 @@ func TestCommands_ExchangeOIDCSessionRefreshAndAccessToken(t *testing.T) {
),
expectFilter(), // token lifetime
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewAccessTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
- "at_accessTokenID", []string{"openid", "offline_access"}, time.Hour),
- ),
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewRefreshTokenRenewedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
- "rt_refreshTokenID2", 24*time.Hour),
- ),
- },
+ oidcsession.NewAccessTokenAddedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
+ "at_accessTokenID", []string{"openid", "offline_access"}, time.Hour),
+ oidcsession.NewRefreshTokenRenewedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate,
+ "rt_refreshTokenID2", 24*time.Hour),
),
),
idGenerator: mock.NewIDGeneratorExpectIDs(t, "accessTokenID", "refreshTokenID2"),
@@ -906,11 +881,9 @@ func TestCommands_RevokeOIDCSessionToken(t *testing.T) {
"rt_refreshTokenID", 7*24*time.Hour, 24*time.Hour),
),
),
- expectPush([]*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewRefreshTokenRevokedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate),
- ),
- }),
+ expectPush(
+ oidcsession.NewRefreshTokenRevokedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate),
+ ),
),
keyAlgorithm: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
},
@@ -985,11 +958,9 @@ func TestCommands_RevokeOIDCSessionToken(t *testing.T) {
"rt_refreshTokenID", 7*24*time.Hour, 24*time.Hour),
),
),
- expectPush([]*repository.Event{
- eventFromEventPusherWithInstanceID("instanceID",
- oidcsession.NewAccessTokenRevokedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate),
- ),
- }),
+ expectPush(
+ oidcsession.NewAccessTokenRevokedEvent(context.Background(), &oidcsession.NewAggregate("V2_oidcSessionID", "org1").Aggregate),
+ ),
),
keyAlgorithm: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
},
diff --git a/internal/command/org.go b/internal/command/org.go
index 72a97b6f01..137b1a65cd 100644
--- a/internal/command/org.go
+++ b/internal/command/org.go
@@ -167,7 +167,7 @@ func (c *orgSetupCommands) push(ctx context.Context) (_ *CreatedOrg, err error)
return &CreatedOrg{
ObjectDetails: &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: c.aggregate.ID,
},
CreatedAdmins: c.createdAdmins(),
@@ -424,7 +424,7 @@ func (c *Commands) RemoveOrg(ctx context.Context, id string) (*domain.ObjectDeta
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
diff --git a/internal/command/org_action_test.go b/internal/command/org_action_test.go
index dadb64261f..58d5d1bf6d 100644
--- a/internal/command/org_action_test.go
+++ b/internal/command/org_action_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/id/mock"
@@ -60,18 +59,13 @@ func TestCommands_AddAction(t *testing.T) {
eventstore: eventstoreExpect(t,
expectPushFailed(
errors.ThrowPreconditionFailed(nil, "id", "name already exists"),
- []*repository.Event{
- eventFromEventPusher(
- action.NewAddedEvent(context.Background(),
- &action.NewAggregate("id1", "org1").Aggregate,
- "name",
- "name() {};",
- 0,
- false,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(action.NewAddActionNameUniqueConstraint("name", "org1")),
+ action.NewAddedEvent(context.Background(),
+ &action.NewAggregate("id1", "org1").Aggregate,
+ "name",
+ "name() {};",
+ 0,
+ false,
+ ),
),
),
idGenerator: mock.ExpectID(t, "id1"),
@@ -93,18 +87,13 @@ func TestCommands_AddAction(t *testing.T) {
fields{
eventstore: eventstoreExpect(t,
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- action.NewAddedEvent(context.Background(),
- &action.NewAggregate("id2", "org1").Aggregate,
- "name2",
- "name2() {};",
- 0,
- false,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(action.NewAddActionNameUniqueConstraint("name2", "org1")),
+ action.NewAddedEvent(context.Background(),
+ &action.NewAggregate("id2", "org1").Aggregate,
+ "name2",
+ "name2() {};",
+ 0,
+ false,
+ ),
),
),
idGenerator: mock.ExpectID(t, "id2"),
@@ -253,22 +242,16 @@ func TestCommands_ChangeAction(t *testing.T) {
),
expectPushFailed(
errors.ThrowPreconditionFailed(nil, "id", "name already exists"),
- []*repository.Event{
- eventFromEventPusher(
- func() *action.ChangedEvent {
- event, _ := action.NewChangedEvent(context.Background(),
- &action.NewAggregate("id1", "org1").Aggregate,
- []action.ActionChanges{
- action.ChangeName("name2", "name"),
- action.ChangeScript("name2() {};"),
- },
- )
- return event
- }(),
- ),
- },
- uniqueConstraintsFromEventConstraint(action.NewRemoveActionNameUniqueConstraint("name", "org1")),
- uniqueConstraintsFromEventConstraint(action.NewAddActionNameUniqueConstraint("name2", "org1")),
+ func() *action.ChangedEvent {
+ event, _ := action.NewChangedEvent(context.Background(),
+ &action.NewAggregate("id1", "org1").Aggregate,
+ []action.ActionChanges{
+ action.ChangeName("name2", "name"),
+ action.ChangeScript("name2() {};"),
+ },
+ )
+ return event
+ }(),
),
),
},
@@ -303,22 +286,16 @@ func TestCommands_ChangeAction(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- func() *action.ChangedEvent {
- event, _ := action.NewChangedEvent(context.Background(),
- &action.NewAggregate("id1", "org1").Aggregate,
- []action.ActionChanges{
- action.ChangeName("name2", "name"),
- action.ChangeScript("name2() {};"),
- },
- )
- return event
- }(),
- ),
- },
- uniqueConstraintsFromEventConstraint(action.NewRemoveActionNameUniqueConstraint("name", "org1")),
- uniqueConstraintsFromEventConstraint(action.NewAddActionNameUniqueConstraint("name2", "org1")),
+ func() *action.ChangedEvent {
+ event, _ := action.NewChangedEvent(context.Background(),
+ &action.NewAggregate("id1", "org1").Aggregate,
+ []action.ActionChanges{
+ action.ChangeName("name2", "name"),
+ action.ChangeScript("name2() {};"),
+ },
+ )
+ return event
+ }(),
),
),
},
@@ -455,13 +432,9 @@ func TestCommands_DeactivateAction(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- action.NewDeactivatedEvent(context.Background(),
- &action.NewAggregate("id1", "org1").Aggregate,
- ),
- ),
- },
+ action.NewDeactivatedEvent(context.Background(),
+ &action.NewAggregate("id1", "org1").Aggregate,
+ ),
),
),
},
@@ -592,13 +565,9 @@ func TestCommands_ReactivateAction(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- action.NewReactivatedEvent(context.Background(),
- &action.NewAggregate("id1", "org1").Aggregate,
- ),
- ),
- },
+ action.NewReactivatedEvent(context.Background(),
+ &action.NewAggregate("id1", "org1").Aggregate,
+ ),
),
),
},
@@ -699,15 +668,10 @@ func TestCommands_DeleteAction(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- action.NewRemovedEvent(context.Background(),
- &action.NewAggregate("id1", "org1").Aggregate,
- "name",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(action.NewRemoveActionNameUniqueConstraint("name", "org1")),
+ action.NewRemovedEvent(context.Background(),
+ &action.NewAggregate("id1", "org1").Aggregate,
+ "name",
+ ),
),
),
},
@@ -738,22 +702,15 @@ func TestCommands_DeleteAction(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- action.NewRemovedEvent(context.Background(),
- &action.NewAggregate("id1", "org1").Aggregate,
- "name",
- ),
- ),
- eventFromEventPusher(
- org.NewTriggerActionsCascadeRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.FlowTypeExternalAuthentication,
- "id1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(action.NewRemoveActionNameUniqueConstraint("name", "org1")),
+ action.NewRemovedEvent(context.Background(),
+ &action.NewAggregate("id1", "org1").Aggregate,
+ "name",
+ ),
+ org.NewTriggerActionsCascadeRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.FlowTypeExternalAuthentication,
+ "id1",
+ ),
),
),
},
diff --git a/internal/command/org_custom_login_text_test.go b/internal/command/org_custom_login_text_test.go
index 46fdcd5a52..ef0754c263 100644
--- a/internal/command/org_custom_login_text_test.go
+++ b/internal/command/org_custom_login_text_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -71,1107 +70,666 @@ func TestCommandSide_SetCustomOrgLoginText(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
- ),
- ), eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
- ),
- ),
- },
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionLoginButtonText, "LoginButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
+ ),
),
),
},
@@ -2579,1103 +2137,663 @@ func TestCommandSide_SetCustomOrgLoginText(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, language.English,
- ),
- ),
- },
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, language.English,
+ ),
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, language.English,
+ ),
),
),
},
@@ -5924,1103 +5042,663 @@ func TestCommandSide_SetCustomOrgLoginText(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
- ),
- ),
- },
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountOtherUser, "OtherUser", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateActive, "SessionState0", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountSessionStateInactive, "SessionState1", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySelectAccountUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginTitleLinkingProcess, "TitleLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginDescriptionLinkingProcess, "DescriptionLinking", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNameLabel, "LoginNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUsernamePlaceHolder, "UsernamePlaceholder", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginLoginnamePlaceHolder, "LoginnamePlaceholder", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginRegisterButtonText, "RegisterButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginExternalUserDescription, "ExternalUserDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLoginUserMustBeMemberOfOrg, "MustBeMemberOfOrg", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordLabel, "PasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetLinkText, "ResetLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordBackButtonText, "BackButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordMinLength, "MinLength", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasUppercase, "HasUppercase", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasLowercase, "HasLowercase", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasNumber, "HasNumber", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordHasSymbol, "HasSymbol", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordConfirmation, "Confirmation", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyUsernameChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordResendButtonText, "ResendButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitPasswordDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationResendButtonText, "ResendButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyEmailVerificationDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserResendButtonText, "ResendButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitializeUserNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptOTPOption, "Provider0", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptU2FOption, "Provider1", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPDescriptionOTP, "OTPDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPSecretLabel, "SecretLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAOTPCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyInitMFADoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersChooseOther, "ChooseOther", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersOTP, "Provider0", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyMFAProvidersU2F, "Provider1", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPCodeLabel, "CodeLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAOTPNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FValidateTokenText, "ValidateTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyVerifyMFAU2FErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessLoginWithPwButtonText, "LoginWithPwButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessValidateTokenButtonText, "ValidateTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptDescriptionInit, "DescriptionInit", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptPasswordlessButtonText, "PasswordlessButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessPromptSkipButtonText, "SkipButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationRegisterTokenButtonText, "RegisterTokenButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationTokenNameLabel, "TokenNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationNotSupported, "NotSupported", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationErrorRetry, "ErrorRetry", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneDescriptionClose, "DescriptionClose", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordlessRegistrationDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeOldPasswordLabel, "OldPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordLabel, "NewPasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNewPasswordConfirmLabel, "NewPasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordChangeDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyPasswordResetDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionUserNameButtonText, "RegisterUsernamePasswordButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationOptionExternalLoginDescription, "ExternalLoginDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserDescriptionOrgRegister, "DescriptionOrgRegister", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLastnameLabel, "LastnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserEmailLabel, "EmailLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserLanguageLabel, "LanguageLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserGenderLabel, "GenderLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordLabel, "PasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegistrationUserBackButtonText, "BackButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewEmailLabel, "EmailLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLastnameLabel, "LastnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNicknameLabel, "NicknameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewLanguageLabel, "LanguageLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPhoneLabel, "PhoneLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewBackButtonText, "BackButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalRegistrationUserOverviewNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgOrgNameLabel, "OrgNameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgFirstnameLabel, "FirstnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgLastnameLabel, "LastnameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgUsernameLabel, "UsernameLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgEmailLabel, "EmailLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordLabel, "PasswordLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPasswordConfirmLabel, "PasswordConfirmLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyRegisterOrgSaveButtonText, "SaveButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneCancelButtonText, "CancelButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLinkingUserDoneNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundLinkButtonText, "LinkButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundAutoRegisterButtonText, "AutoRegisterButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSAndPrivacyLabel, "TOSAndPrivacyLabel", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSConfirm, "TOSConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundTOSLinkText, "TOSLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyConfirm, "PrivacyConfirm", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyExternalNotFoundPrivacyLinkText, "PrivacyLinkText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginAutoRedirectDescription, "AutoRedirectDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginRedirectedDescription, "RedirectedDescription", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeySuccessLoginNextButtonText, "NextButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneTitle, "Title", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneDescription, "Description", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyLogoutDoneLoginButtonText, "LoginButtonText", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterTOS, "TOS", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterPrivacyPolicy, "PrivacyPolicy", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterHelp, "Help", language.English,
+ ),
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, domain.LoginCustomText, domain.LoginKeyFooterSupportEmail, "Support Email", language.English,
+ ),
),
),
},
diff --git a/internal/command/org_custom_message_text_test.go b/internal/command/org_custom_message_text_test.go
index ecf10e069c..61a562e456 100644
--- a/internal/command/org_custom_message_text_test.go
+++ b/internal/command/org_custom_message_text_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -71,71 +70,61 @@ func TestCommandSide_SetCustomMessageText(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageGreeting,
- "Greeting",
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageSubject,
- "Subject",
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageTitle,
- "Title",
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessagePreHeader,
- "PreHeader",
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageText,
- "Text",
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageButtonText,
- "ButtonText",
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageFooterText,
- "Footer",
- language.English,
- ),
- ),
- },
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageGreeting,
+ "Greeting",
+ language.English,
+ ),
+
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageSubject,
+ "Subject",
+ language.English,
+ ),
+
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageTitle,
+ "Title",
+ language.English,
+ ),
+
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessagePreHeader,
+ "PreHeader",
+ language.English,
+ ),
+
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageText,
+ "Text",
+ language.English,
+ ),
+
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageButtonText,
+ "ButtonText",
+ language.English,
+ ),
+
+ org.NewCustomTextSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageFooterText,
+ "Footer",
+ language.English,
+ ),
),
),
},
@@ -231,64 +220,54 @@ func TestCommandSide_SetCustomMessageText(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageGreeting,
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageSubject,
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageTitle,
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessagePreHeader,
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageText,
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageButtonText,
- language.English,
- ),
- ),
- eventFromEventPusher(
- org.NewCustomTextRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- domain.MessageFooterText,
- language.English,
- ),
- ),
- },
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageGreeting,
+ language.English,
+ ),
+
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageSubject,
+ language.English,
+ ),
+
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageTitle,
+ language.English,
+ ),
+
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessagePreHeader,
+ language.English,
+ ),
+
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageText,
+ language.English,
+ ),
+
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageButtonText,
+ language.English,
+ ),
+
+ org.NewCustomTextRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ domain.MessageFooterText,
+ language.English,
+ ),
),
),
},
@@ -472,15 +451,11 @@ func TestCommandSide_RemoveCustomMessageText(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewCustomTextTemplateRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "Template",
- language.English,
- ),
- ),
- },
+ org.NewCustomTextTemplateRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "Template",
+ language.English,
+ ),
),
),
},
diff --git a/internal/command/org_domain_test.go b/internal/command/org_domain_test.go
index feb737cde1..ace9cb8744 100644
--- a/internal/command/org_domain_test.go
+++ b/internal/command/org_domain_test.go
@@ -15,7 +15,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -366,12 +365,10 @@ func TestCommandSide_AddOrgDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- )),
- },
+ org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ ),
),
),
},
@@ -572,19 +569,17 @@ func TestCommandSide_GenerateOrgDomainValidation(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainVerificationAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- domain.OrgDomainValidationTypeDNS,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- )),
- },
+ org.NewDomainVerificationAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ domain.OrgDomainValidationTypeDNS,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ ),
),
),
secretGenerator: GetMockSecretGenerator(t),
@@ -624,19 +619,17 @@ func TestCommandSide_GenerateOrgDomainValidation(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainVerificationAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- domain.OrgDomainValidationTypeHTTP,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- )),
- },
+ org.NewDomainVerificationAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ domain.OrgDomainValidationTypeHTTP,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ ),
),
),
secretGenerator: GetMockSecretGenerator(t),
@@ -875,12 +868,10 @@ func TestCommandSide_ValidateOrgDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainVerificationFailedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- )),
- },
+ org.NewDomainVerificationFailedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -933,13 +924,10 @@ func TestCommandSide_ValidateOrgDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("domain.ch")),
+ org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -995,13 +983,10 @@ func TestCommandSide_ValidateOrgDomain(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("domain.ch")),
+ org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1078,21 +1063,16 @@ func TestCommandSide_ValidateOrgDomain(t *testing.T) {
&org.NewAggregate("org2").Aggregate,
false, false, false))),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- )),
- eventFromEventPusher(user.NewDomainClaimedEvent(context.Background(),
- &user.NewAggregate("user1", "org2").Aggregate,
- "tempid@temporary.zitadel.ch",
- "username@domain.ch",
- false,
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("domain.ch")),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username@domain.ch", "org2", false)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("tempid@temporary.zitadel.ch", "org2", false)),
+ org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ ),
+ user.NewDomainClaimedEvent(context.Background(),
+ &user.NewAggregate("user1", "org2").Aggregate,
+ "tempid@temporary.zitadel.ch",
+ "username@domain.ch",
+ false,
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1283,12 +1263,10 @@ func TestCommandSide_SetPrimaryDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch",
- )),
- },
+ org.NewDomainPrimarySetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch",
+ ),
),
),
},
@@ -1476,12 +1454,10 @@ func TestCommandSide_RemoveOrgDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch", false,
- )),
- },
+ org.NewDomainRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch", false,
+ ),
),
),
},
@@ -1526,13 +1502,10 @@ func TestCommandSide_RemoveOrgDomain(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewDomainRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "domain.ch", true,
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgDomainUniqueConstraint("domain.ch")),
+ org.NewDomainRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "domain.ch", true,
+ ),
),
),
},
diff --git a/internal/command/org_flow_test.go b/internal/command/org_flow_test.go
index 5a856015be..178cfd44ad 100644
--- a/internal/command/org_flow_test.go
+++ b/internal/command/org_flow_test.go
@@ -79,11 +79,9 @@ func TestCommands_ClearFlow(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- org.NewFlowClearedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.FlowTypeExternalAuthentication,
- ),
+ org.NewFlowClearedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.FlowTypeExternalAuthentication,
),
),
),
@@ -241,13 +239,11 @@ func TestCommands_SetTriggerActions(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- org.NewTriggerActionsSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.FlowTypeExternalAuthentication,
- domain.TriggerTypePostAuthentication,
- []string{"actionID1"},
- ),
+ org.NewTriggerActionsSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.FlowTypeExternalAuthentication,
+ domain.TriggerTypePostAuthentication,
+ []string{"actionID1"},
),
),
),
diff --git a/internal/command/org_idp_config_test.go b/internal/command/org_idp_config_test.go
index 1705a620bc..cffb32433b 100644
--- a/internal/command/org_idp_config_test.go
+++ b/internal/command/org_idp_config_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -91,38 +90,31 @@ func TestCommandSide_AddIDPConfig(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewIDPConfigAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1",
- "name1",
- domain.IDPConfigTypeOIDC,
- domain.IDPConfigStylingTypeGoogle,
- true,
- ),
- ),
- eventFromEventPusher(
- org.NewIDPOIDCConfigAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "clientid1",
- "config1",
- "issuer",
- "authorization-endpoint",
- "token-endpoint",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("secret"),
- },
- domain.OIDCMappingFieldEmail,
- domain.OIDCMappingFieldEmail,
- "scope",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(idpconfig.NewAddIDPConfigNameUniqueConstraint("name1", "org1")),
+ org.NewIDPConfigAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1",
+ "name1",
+ domain.IDPConfigTypeOIDC,
+ domain.IDPConfigStylingTypeGoogle,
+ true,
+ ),
+ org.NewIDPOIDCConfigAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "clientid1",
+ "config1",
+ "issuer",
+ "authorization-endpoint",
+ "token-endpoint",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("secret"),
+ },
+ domain.OIDCMappingFieldEmail,
+ domain.OIDCMappingFieldEmail,
+ "scope",
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "config1"),
@@ -167,29 +159,22 @@ func TestCommandSide_AddIDPConfig(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewIDPConfigAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1",
- "name1",
- domain.IDPConfigTypeOIDC,
- domain.IDPConfigStylingTypeGoogle,
- false,
- ),
- ),
- eventFromEventPusher(
- org.NewIDPJWTConfigAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1",
- "jwt-endpoint",
- "issuer",
- "keys-endpoint",
- "auth",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(idpconfig.NewAddIDPConfigNameUniqueConstraint("name1", "org1")),
+ org.NewIDPConfigAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1",
+ "name1",
+ domain.IDPConfigTypeOIDC,
+ domain.IDPConfigStylingTypeGoogle,
+ false,
+ ),
+ org.NewIDPJWTConfigAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1",
+ "jwt-endpoint",
+ "issuer",
+ "keys-endpoint",
+ "auth",
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "config1"),
@@ -350,13 +335,7 @@ func TestCommandSide_ChangeIDPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newIDPConfigChangedEvent(context.Background(), "org1", "config1", "name1", "name2", domain.IDPConfigStylingTypeUnspecified),
- ),
- },
- uniqueConstraintsFromEventConstraint(idpconfig.NewRemoveIDPConfigNameUniqueConstraint("name1", "org1")),
- uniqueConstraintsFromEventConstraint(idpconfig.NewAddIDPConfigNameUniqueConstraint("name2", "org1")),
+ newIDPConfigChangedEvent(context.Background(), "org1", "config1", "name1", "name2", domain.IDPConfigStylingTypeUnspecified),
),
),
},
@@ -474,14 +453,11 @@ func TestCommands_RemoveIDPConfig(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- org.NewIDPConfigRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "idp1",
- "name1",
- ),
+ org.NewIDPConfigRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "idp1",
+ "name1",
),
- uniqueConstraintsFromEventConstraint(idpconfig.NewRemoveIDPConfigNameUniqueConstraint("name1", "org1")),
),
),
},
@@ -540,24 +516,20 @@ func TestCommands_RemoveIDPConfig(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- org.NewIDPConfigRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "idp1",
- "name1",
- ),
- org.NewIdentityProviderCascadeRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "idp1",
- ),
- user.NewUserIDPLinkCascadeRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "idp1",
- "id1",
- ),
+ org.NewIDPConfigRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "idp1",
+ "name1",
+ ),
+ org.NewIdentityProviderCascadeRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "idp1",
+ ),
+ user.NewUserIDPLinkCascadeRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "idp1",
+ "id1",
),
- uniqueConstraintsFromEventConstraint(idpconfig.NewRemoveIDPConfigNameUniqueConstraint("name1", "org1")),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUserIDPLinkUniqueConstraint("idp1", "id1")),
),
),
},
diff --git a/internal/command/org_idp_jwt_config_test.go b/internal/command/org_idp_jwt_config_test.go
index 4923b8180b..1706f27ccb 100644
--- a/internal/command/org_idp_jwt_config_test.go
+++ b/internal/command/org_idp_jwt_config_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -211,18 +210,14 @@ func TestCommandSide_ChangeIDPJWTConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newIDPJWTConfigChangedEvent(context.Background(),
- "org1",
- "config1",
- "jwt-endpoint-changed",
- "issuer-changed",
- "keys-endpoint-changed",
- "auth-changed",
- ),
- ),
- },
+ newIDPJWTConfigChangedEvent(context.Background(),
+ "org1",
+ "config1",
+ "jwt-endpoint-changed",
+ "issuer-changed",
+ "keys-endpoint-changed",
+ "auth-changed",
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
diff --git a/internal/command/org_idp_oidc_config_test.go b/internal/command/org_idp_oidc_config_test.go
index 2fd91d7012..0122e6fedd 100644
--- a/internal/command/org_idp_oidc_config_test.go
+++ b/internal/command/org_idp_oidc_config_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -241,27 +240,23 @@ func TestCommandSide_ChangeIDPOIDCConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newIDPOIDCConfigChangedEvent(context.Background(),
- "org1",
- "config1",
- "clientid-changed",
- "issuer-changed",
- "authorization-endpoint-changed",
- "token-endpoint-changed",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("secret-changed"),
- },
- domain.OIDCMappingFieldPreferredLoginName,
- domain.OIDCMappingFieldPreferredLoginName,
- []string{"scope", "scope2"},
- ),
- ),
- },
+ newIDPOIDCConfigChangedEvent(context.Background(),
+ "org1",
+ "config1",
+ "clientid-changed",
+ "issuer-changed",
+ "authorization-endpoint-changed",
+ "token-endpoint-changed",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("secret-changed"),
+ },
+ domain.OIDCMappingFieldPreferredLoginName,
+ domain.OIDCMappingFieldPreferredLoginName,
+ []string{"scope", "scope2"},
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
diff --git a/internal/command/org_idp_test.go b/internal/command/org_idp_test.go
index f85fb1c216..d6eef4a399 100644
--- a/internal/command/org_idp_test.go
+++ b/internal/command/org_idp_test.go
@@ -14,7 +14,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errors "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/idp"
@@ -195,24 +194,23 @@ func TestCommandSide_AddOrgGenericOAuthIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewOAuthIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- "idAttribute",
- nil,
- idp.Options{},
- )),
+ org.NewOAuthIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ "idAttribute",
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -242,29 +240,28 @@ func TestCommandSide_AddOrgGenericOAuthIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewOAuthIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- "idAttribute",
- []string{"user"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewOAuthIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ "idAttribute",
+ []string{"user"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -569,36 +566,34 @@ func TestCommandSide_UpdateOrgGenericOAuthIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewOAuthIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.OAuthIDPChanges{
- idp.ChangeOAuthName("new name"),
- idp.ChangeOAuthClientID("clientID2"),
- idp.ChangeOAuthClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeOAuthAuthorizationEndpoint("new auth"),
- idp.ChangeOAuthTokenEndpoint("new token"),
- idp.ChangeOAuthUserEndpoint("new user"),
- idp.ChangeOAuthScopes([]string{"openid", "profile"}),
- idp.ChangeOAuthIDAttribute("newAttribute"),
- idp.ChangeOAuthOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewOAuthIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.OAuthIDPChanges{
+ idp.ChangeOAuthName("new name"),
+ idp.ChangeOAuthClientID("clientID2"),
+ idp.ChangeOAuthClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeOAuthAuthorizationEndpoint("new auth"),
+ idp.ChangeOAuthTokenEndpoint("new token"),
+ idp.ChangeOAuthUserEndpoint("new user"),
+ idp.ChangeOAuthScopes([]string{"openid", "profile"}),
+ idp.ChangeOAuthIDAttribute("newAttribute"),
+ idp.ChangeOAuthOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -754,22 +749,21 @@ func TestCommandSide_AddOrgGenericOIDCIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewOIDCIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- false,
- idp.Options{},
- )),
+ org.NewOIDCIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ false,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -796,27 +790,26 @@ func TestCommandSide_AddOrgGenericOIDCIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewOIDCIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{openid.ScopeOpenID},
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewOIDCIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{openid.ScopeOpenID},
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -1043,34 +1036,32 @@ func TestCommandSide_UpdateOrgGenericOIDCIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewOIDCIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.OIDCIDPChanges{
- idp.ChangeOIDCName("new name"),
- idp.ChangeOIDCIssuer("new issuer"),
- idp.ChangeOIDCClientID("clientID2"),
- idp.ChangeOIDCClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeOIDCScopes([]string{"openid", "profile"}),
- idp.ChangeOIDCIsIDTokenMapping(true),
- idp.ChangeOIDCOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewOIDCIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.OIDCIDPChanges{
+ idp.ChangeOIDCName("new name"),
+ idp.ChangeOIDCIssuer("new issuer"),
+ idp.ChangeOIDCClientID("clientID2"),
+ idp.ChangeOIDCClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeOIDCScopes([]string{"openid", "profile"}),
+ idp.ChangeOIDCIsIDTokenMapping(true),
+ idp.ChangeOIDCOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1237,28 +1228,24 @@ func TestCommandSide_MigrateOrgGenericOIDCToAzureADProvider(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- func() eventstore.Command {
- event := org.NewOIDCIDPMigratedAzureADEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- "",
- false,
- idp.Options{},
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ event := org.NewOIDCIDPMigratedAzureADEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ "",
+ false,
+ idp.Options{},
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1300,27 +1287,26 @@ func TestCommandSide_MigrateOrgGenericOIDCToAzureADProvider(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- org.NewOIDCIDPMigratedAzureADEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- "tenant",
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewOIDCIDPMigratedAzureADEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ "tenant",
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1469,20 +1455,19 @@ func TestCommandSide_MigrateOrgOIDCToGoogleIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- org.NewOIDCIDPMigratedGoogleEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
+ org.NewOIDCIDPMigratedGoogleEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1523,25 +1508,24 @@ func TestCommandSide_MigrateOrgOIDCToGoogleIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- org.NewOIDCIDPMigratedGoogleEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewOIDCIDPMigratedGoogleEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1671,22 +1655,21 @@ func TestCommandSide_AddOrgAzureADIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewAzureADIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- "",
- false,
- idp.Options{},
- )),
+ org.NewAzureADIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ "",
+ false,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -1712,27 +1695,26 @@ func TestCommandSide_AddOrgAzureADIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewAzureADIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- "tenant",
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewAzureADIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ "tenant",
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -1937,34 +1919,32 @@ func TestCommandSide_UpdateOrgAzureADIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewAzureADIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.AzureADIDPChanges{
- idp.ChangeAzureADName("new name"),
- idp.ChangeAzureADClientID("new clientID"),
- idp.ChangeAzureADClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new clientSecret"),
- }),
- idp.ChangeAzureADScopes([]string{"openid", "profile"}),
- idp.ChangeAzureADTenant("new tenant"),
- idp.ChangeAzureADIsEmailVerified(true),
- idp.ChangeAzureADOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewAzureADIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.AzureADIDPChanges{
+ idp.ChangeAzureADName("new name"),
+ idp.ChangeAzureADClientID("new clientID"),
+ idp.ChangeAzureADClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new clientSecret"),
+ }),
+ idp.ChangeAzureADScopes([]string{"openid", "profile"}),
+ idp.ChangeAzureADTenant("new tenant"),
+ idp.ChangeAzureADIsEmailVerified(true),
+ idp.ChangeAzureADOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -2077,20 +2057,19 @@ func TestCommandSide_AddOrgGitHubIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewGitHubIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
+ org.NewGitHubIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2115,25 +2094,24 @@ func TestCommandSide_AddOrgGitHubIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewGitHubIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewGitHubIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2311,32 +2289,30 @@ func TestCommandSide_UpdateOrgGitHubIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewGitHubIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.GitHubIDPChanges{
- idp.ChangeGitHubName("new name"),
- idp.ChangeGitHubClientID("new clientID"),
- idp.ChangeGitHubClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new clientSecret"),
- }),
- idp.ChangeGitHubScopes([]string{"openid", "profile"}),
- idp.ChangeGitHubOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewGitHubIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.GitHubIDPChanges{
+ idp.ChangeGitHubName("new name"),
+ idp.ChangeGitHubClientID("new clientID"),
+ idp.ChangeGitHubClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new clientSecret"),
+ }),
+ idp.ChangeGitHubScopes([]string{"openid", "profile"}),
+ idp.ChangeGitHubOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -2533,23 +2509,22 @@ func TestCommandSide_AddOrgGitHubEnterpriseIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- nil,
- idp.Options{},
- )),
+ org.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2578,28 +2553,27 @@ func TestCommandSide_AddOrgGitHubEnterpriseIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- "auth",
- "token",
- "user",
- []string{"user"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewGitHubEnterpriseIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ "auth",
+ "token",
+ "user",
+ []string{"user"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -2876,35 +2850,33 @@ func TestCommandSide_UpdateOrgGitHubEnterpriseIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewGitHubEnterpriseIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.GitHubEnterpriseIDPChanges{
- idp.ChangeGitHubEnterpriseName("new name"),
- idp.ChangeGitHubEnterpriseClientID("clientID2"),
- idp.ChangeGitHubEnterpriseClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGitHubEnterpriseAuthorizationEndpoint("new auth"),
- idp.ChangeGitHubEnterpriseTokenEndpoint("new token"),
- idp.ChangeGitHubEnterpriseUserEndpoint("new user"),
- idp.ChangeGitHubEnterpriseScopes([]string{"openid", "profile"}),
- idp.ChangeGitHubEnterpriseOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewGitHubEnterpriseIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.GitHubEnterpriseIDPChanges{
+ idp.ChangeGitHubEnterpriseName("new name"),
+ idp.ChangeGitHubEnterpriseClientID("clientID2"),
+ idp.ChangeGitHubEnterpriseClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGitHubEnterpriseAuthorizationEndpoint("new auth"),
+ idp.ChangeGitHubEnterpriseTokenEndpoint("new token"),
+ idp.ChangeGitHubEnterpriseUserEndpoint("new user"),
+ idp.ChangeGitHubEnterpriseScopes([]string{"openid", "profile"}),
+ idp.ChangeGitHubEnterpriseOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -3018,22 +2990,19 @@ func TestCommandSide_AddOrgGitLabIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewGitLabIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
- },
+ org.NewGitLabIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3058,27 +3027,24 @@ func TestCommandSide_AddOrgGitLabIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewGitLabIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ org.NewGitLabIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3255,33 +3221,29 @@ func TestCommandSide_UpdateOrgGitLabIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- func() eventstore.Command {
- t := true
- event, _ := org.NewGitLabIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.GitLabIDPChanges{
- idp.ChangeGitLabClientID("clientID2"),
- idp.ChangeGitLabClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGitLabScopes([]string{"openid", "profile"}),
- idp.ChangeGitLabOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewGitLabIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.GitLabIDPChanges{
+ idp.ChangeGitLabClientID("clientID2"),
+ idp.ChangeGitLabClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGitLabScopes([]string{"openid", "profile"}),
+ idp.ChangeGitLabOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -3432,23 +3394,20 @@ func TestCommandSide_AddOrgGitLabSelfHostedIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
- },
+ org.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3475,28 +3434,25 @@ func TestCommandSide_AddOrgGitLabSelfHostedIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- "issuer",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
- },
+ org.NewGitLabSelfHostedIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ "issuer",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3720,35 +3676,31 @@ func TestCommandSide_UpdateOrgGitLabSelfHostedIDP(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- func() eventstore.Command {
- t := true
- event, _ := org.NewGitLabSelfHostedIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.GitLabSelfHostedIDPChanges{
- idp.ChangeGitLabSelfHostedClientID("clientID2"),
- idp.ChangeGitLabSelfHostedIssuer("newIssuer"),
- idp.ChangeGitLabSelfHostedName("newName"),
- idp.ChangeGitLabSelfHostedClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGitLabSelfHostedScopes([]string{"openid", "profile"}),
- idp.ChangeGitLabSelfHostedOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
- },
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewGitLabSelfHostedIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.GitLabSelfHostedIDPChanges{
+ idp.ChangeGitLabSelfHostedClientID("clientID2"),
+ idp.ChangeGitLabSelfHostedIssuer("newIssuer"),
+ idp.ChangeGitLabSelfHostedName("newName"),
+ idp.ChangeGitLabSelfHostedClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGitLabSelfHostedScopes([]string{"openid", "profile"}),
+ idp.ChangeGitLabSelfHostedOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -3860,20 +3812,19 @@ func TestCommandSide_AddOrgGoogleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewGoogleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- nil,
- idp.Options{},
- )),
+ org.NewGoogleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -3898,25 +3849,24 @@ func TestCommandSide_AddOrgGoogleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewGoogleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("clientSecret"),
- },
- []string{"openid"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewGoogleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("clientSecret"),
+ },
+ []string{"openid"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -4093,31 +4043,29 @@ func TestCommandSide_UpdateOrgGoogleIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewGoogleIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.GoogleIDPChanges{
- idp.ChangeGoogleClientID("clientID2"),
- idp.ChangeGoogleClientSecret(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newSecret"),
- }),
- idp.ChangeGoogleScopes([]string{"openid", "profile"}),
- idp.ChangeGoogleOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewGoogleIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.GoogleIDPChanges{
+ idp.ChangeGoogleClientID("clientID2"),
+ idp.ChangeGoogleClientSecret(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newSecret"),
+ }),
+ idp.ChangeGoogleScopes([]string{"openid", "profile"}),
+ idp.ChangeGoogleOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -4362,27 +4310,26 @@ func TestCommandSide_AddOrgLDAPIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewLDAPIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- []string{"server"},
- false,
- "baseDN",
- "dn",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- "user",
- []string{"object"},
- []string{"filter"},
- time.Second*30,
- idp.LDAPAttributes{},
- idp.Options{},
- )),
+ org.NewLDAPIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ []string{"server"},
+ false,
+ "baseDN",
+ "dn",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ "user",
+ []string{"object"},
+ []string{"filter"},
+ time.Second*30,
+ idp.LDAPAttributes{},
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -4415,46 +4362,45 @@ func TestCommandSide_AddOrgLDAPIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewLDAPIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- []string{"server"},
- false,
- "baseDN",
- "dn",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- "user",
- []string{"object"},
- []string{"filter"},
- time.Second*30,
- idp.LDAPAttributes{
- IDAttribute: "id",
- FirstNameAttribute: "firstName",
- LastNameAttribute: "lastName",
- DisplayNameAttribute: "displayName",
- NickNameAttribute: "nickName",
- PreferredUsernameAttribute: "preferredUsername",
- EmailAttribute: "email",
- EmailVerifiedAttribute: "emailVerified",
- PhoneAttribute: "phone",
- PhoneVerifiedAttribute: "phoneVerified",
- PreferredLanguageAttribute: "preferredLanguage",
- AvatarURLAttribute: "avatarURL",
- ProfileAttribute: "profile",
- },
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewLDAPIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ []string{"server"},
+ false,
+ "baseDN",
+ "dn",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ "user",
+ []string{"object"},
+ []string{"filter"},
+ time.Second*30,
+ idp.LDAPAttributes{
+ IDAttribute: "id",
+ FirstNameAttribute: "firstName",
+ LastNameAttribute: "lastName",
+ DisplayNameAttribute: "displayName",
+ NickNameAttribute: "nickName",
+ PreferredUsernameAttribute: "preferredUsername",
+ EmailAttribute: "email",
+ EmailVerifiedAttribute: "emailVerified",
+ PhoneAttribute: "phone",
+ PhoneVerifiedAttribute: "phoneVerified",
+ PreferredLanguageAttribute: "preferredLanguage",
+ AvatarURLAttribute: "avatarURL",
+ ProfileAttribute: "profile",
+ },
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -4812,53 +4758,51 @@ func TestCommandSide_UpdateOrgLDAPIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewLDAPIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.LDAPIDPChanges{
- idp.ChangeLDAPName("new name"),
- idp.ChangeLDAPServers([]string{"new server"}),
- idp.ChangeLDAPStartTLS(true),
- idp.ChangeLDAPBaseDN("new basedn"),
- idp.ChangeLDAPBindDN("new binddn"),
- idp.ChangeLDAPBindPassword(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new password"),
- }),
- idp.ChangeLDAPUserBase("new user"),
- idp.ChangeLDAPUserObjectClasses([]string{"new object"}),
- idp.ChangeLDAPUserFilters([]string{"new filter"}),
- idp.ChangeLDAPTimeout(time.Second * 20),
- idp.ChangeLDAPAttributes(idp.LDAPAttributeChanges{
- IDAttribute: stringPointer("new id"),
- FirstNameAttribute: stringPointer("new firstName"),
- LastNameAttribute: stringPointer("new lastName"),
- DisplayNameAttribute: stringPointer("new displayName"),
- NickNameAttribute: stringPointer("new nickName"),
- PreferredUsernameAttribute: stringPointer("new preferredUsername"),
- EmailAttribute: stringPointer("new email"),
- EmailVerifiedAttribute: stringPointer("new emailVerified"),
- PhoneAttribute: stringPointer("new phone"),
- PhoneVerifiedAttribute: stringPointer("new phoneVerified"),
- PreferredLanguageAttribute: stringPointer("new preferredLanguage"),
- AvatarURLAttribute: stringPointer("new avatarURL"),
- ProfileAttribute: stringPointer("new profile"),
- }),
- idp.ChangeLDAPOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewLDAPIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.LDAPIDPChanges{
+ idp.ChangeLDAPName("new name"),
+ idp.ChangeLDAPServers([]string{"new server"}),
+ idp.ChangeLDAPStartTLS(true),
+ idp.ChangeLDAPBaseDN("new basedn"),
+ idp.ChangeLDAPBindDN("new binddn"),
+ idp.ChangeLDAPBindPassword(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new password"),
+ }),
+ idp.ChangeLDAPUserBase("new user"),
+ idp.ChangeLDAPUserObjectClasses([]string{"new object"}),
+ idp.ChangeLDAPUserFilters([]string{"new filter"}),
+ idp.ChangeLDAPTimeout(time.Second * 20),
+ idp.ChangeLDAPAttributes(idp.LDAPAttributeChanges{
+ IDAttribute: stringPointer("new id"),
+ FirstNameAttribute: stringPointer("new firstName"),
+ LastNameAttribute: stringPointer("new lastName"),
+ DisplayNameAttribute: stringPointer("new displayName"),
+ NickNameAttribute: stringPointer("new nickName"),
+ PreferredUsernameAttribute: stringPointer("new preferredUsername"),
+ EmailAttribute: stringPointer("new email"),
+ EmailVerifiedAttribute: stringPointer("new emailVerified"),
+ PhoneAttribute: stringPointer("new phone"),
+ PhoneVerifiedAttribute: stringPointer("new phoneVerified"),
+ PreferredLanguageAttribute: stringPointer("new preferredLanguage"),
+ AvatarURLAttribute: stringPointer("new avatarURL"),
+ ProfileAttribute: stringPointer("new profile"),
+ }),
+ idp.ChangeLDAPOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -5031,22 +4975,21 @@ func TestCommandSide_AddOrgAppleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewAppleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- "teamID",
- "keyID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("privateKey"),
- },
- nil,
- idp.Options{},
- )),
+ org.NewAppleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ "teamID",
+ "keyID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("privateKey"),
+ },
+ nil,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5073,27 +5016,26 @@ func TestCommandSide_AddOrgAppleIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewAppleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "",
- "clientID",
- "teamID",
- "keyID",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("privateKey"),
- },
- []string{"name", "email"},
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewAppleIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "",
+ "clientID",
+ "teamID",
+ "keyID",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("privateKey"),
+ },
+ []string{"name", "email"},
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5319,33 +5261,31 @@ func TestCommandSide_UpdateOrgAppleIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewAppleIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.AppleIDPChanges{
- idp.ChangeAppleClientID("clientID2"),
- idp.ChangeAppleTeamID("teamID2"),
- idp.ChangeAppleKeyID("keyID2"),
- idp.ChangeApplePrivateKey(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("newPrivateKey"),
- }),
- idp.ChangeAppleScopes([]string{"name", "email"}),
- idp.ChangeAppleOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewAppleIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.AppleIDPChanges{
+ idp.ChangeAppleClientID("clientID2"),
+ idp.ChangeAppleTeamID("teamID2"),
+ idp.ChangeAppleKeyID("keyID2"),
+ idp.ChangeApplePrivateKey(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("newPrivateKey"),
+ }),
+ idp.ChangeAppleScopes([]string{"name", "email"}),
+ idp.ChangeAppleOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -5462,22 +5402,21 @@ func TestCommandSide_AddOrgSAMLIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewSAMLIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- []byte("metadata"),
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("key"),
- },
- []byte("certificate"),
- "",
- false,
- idp.Options{},
- )),
+ org.NewSAMLIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ []byte("metadata"),
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("key"),
+ },
+ []byte("certificate"),
+ "",
+ false,
+ idp.Options{},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5502,27 +5441,26 @@ func TestCommandSide_AddOrgSAMLIDP(t *testing.T) {
eventstore: eventstoreExpect(t,
expectFilter(),
expectPush(
- eventPusherToEvents(
- org.NewSAMLIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- "name",
- []byte("metadata"),
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("key"),
- },
- []byte("certificate"),
- "binding",
- true,
- idp.Options{
- IsCreationAllowed: true,
- IsLinkingAllowed: true,
- IsAutoCreation: true,
- IsAutoUpdate: true,
- },
- )),
+ org.NewSAMLIDPAddedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ "name",
+ []byte("metadata"),
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("key"),
+ },
+ []byte("certificate"),
+ "binding",
+ true,
+ idp.Options{
+ IsCreationAllowed: true,
+ IsLinkingAllowed: true,
+ IsAutoCreation: true,
+ IsAutoUpdate: true,
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "id1"),
@@ -5729,27 +5667,25 @@ func TestCommandSide_UpdateOrgSAMLIDP(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- t := true
- event, _ := org.NewSAMLIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.SAMLIDPChanges{
- idp.ChangeSAMLName("new name"),
- idp.ChangeSAMLMetadata([]byte("new metadata")),
- idp.ChangeSAMLBinding("new binding"),
- idp.ChangeSAMLWithSignedRequest(true),
- idp.ChangeSAMLOptions(idp.OptionChanges{
- IsCreationAllowed: &t,
- IsLinkingAllowed: &t,
- IsAutoCreation: &t,
- IsAutoUpdate: &t,
- }),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ t := true
+ event, _ := org.NewSAMLIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.SAMLIDPChanges{
+ idp.ChangeSAMLName("new name"),
+ idp.ChangeSAMLMetadata([]byte("new metadata")),
+ idp.ChangeSAMLBinding("new binding"),
+ idp.ChangeSAMLWithSignedRequest(true),
+ idp.ChangeSAMLOptions(idp.OptionChanges{
+ IsCreationAllowed: &t,
+ IsLinkingAllowed: &t,
+ IsAutoCreation: &t,
+ IsAutoUpdate: &t,
+ }),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -5873,23 +5809,21 @@ func TestCommandSide_RegenerateOrgSAMLProviderCertificate(t *testing.T) {
)),
),
expectPush(
- eventPusherToEvents(
- func() eventstore.Command {
- event, _ := org.NewSAMLIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
- "id1",
- []idp.SAMLIDPChanges{
- idp.ChangeSAMLKey(&crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("new key"),
- }),
- idp.ChangeSAMLCertificate([]byte("new certificate")),
- },
- )
- return event
- }(),
- ),
+ func() eventstore.Command {
+ event, _ := org.NewSAMLIDPChangedEvent(context.Background(), &org.NewAggregate("org1").Aggregate,
+ "id1",
+ []idp.SAMLIDPChanges{
+ idp.ChangeSAMLKey(&crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("new key"),
+ }),
+ idp.ChangeSAMLCertificate([]byte("new certificate")),
+ },
+ )
+ return event
+ }(),
),
),
secretCrypto: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
diff --git a/internal/command/org_member_test.go b/internal/command/org_member_test.go
index 309c6046a7..db2b9038a2 100644
--- a/internal/command/org_member_test.go
+++ b/internal/command/org_member_test.go
@@ -12,9 +12,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/repository/member"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -432,14 +430,11 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
),
expectFilter(),
expectPushFailed(errors.ThrowAlreadyExists(nil, "ERROR", "internal"),
- []*repository.Event{
- eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "user1",
- []string{"ORG_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("org1", "user1")),
+ org.NewMemberAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "user1",
+ []string{"ORG_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -481,14 +476,11 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "user1",
- []string{"ORG_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("org1", "user1")),
+ org.NewMemberAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "user1",
+ []string{"ORG_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -671,13 +663,11 @@ func TestCommandSide_ChangeOrgMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewMemberChangedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "user1",
- []string{"ORG_OWNER", "ORG_OWNER_VIEWER"}...,
- )),
- },
+ org.NewMemberChangedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "user1",
+ []string{"ORG_OWNER", "ORG_OWNER_VIEWER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -818,13 +808,10 @@ func TestCommandSide_RemoveOrgMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectMemberRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- )),
- },
- uniqueConstraintsFromEventConstraint(member.NewRemoveMemberUniqueConstraint("project1", "user1")),
+ project.NewProjectMemberRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ ),
),
),
},
diff --git a/internal/command/org_metadata_test.go b/internal/command/org_metadata_test.go
index 468e0dc050..2f20d12c6f 100644
--- a/internal/command/org_metadata_test.go
+++ b/internal/command/org_metadata_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -95,15 +94,11 @@ func TestCommandSide_SetOrgMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewMetadataSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- []byte("value"),
- ),
- ),
- },
+ org.NewMetadataSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ []byte("value"),
+ ),
),
),
},
@@ -244,22 +239,16 @@ func TestCommandSide_BulkSetOrgMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewMetadataSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- []byte("value"),
- ),
- ),
- eventFromEventPusher(
- org.NewMetadataSetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key1",
- []byte("value1"),
- ),
- ),
- },
+ org.NewMetadataSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ []byte("value"),
+ ),
+ org.NewMetadataSetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key1",
+ []byte("value1"),
+ ),
),
),
},
@@ -399,14 +388,10 @@ func TestCommandSide_OrgRemoveMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewMetadataRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- ),
- ),
- },
+ org.NewMetadataRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ ),
),
),
},
@@ -597,20 +582,14 @@ func TestCommandSide_BulkRemoveOrgMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewMetadataRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- ),
- ),
- eventFromEventPusher(
- org.NewMetadataRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key1",
- ),
- ),
- },
+ org.NewMetadataRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ ),
+ org.NewMetadataRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key1",
+ ),
),
),
},
diff --git a/internal/command/org_policy_domain_test.go b/internal/command/org_policy_domain_test.go
index c034271c74..c431612a56 100644
--- a/internal/command/org_policy_domain_test.go
+++ b/internal/command/org_policy_domain_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -100,16 +99,12 @@ func TestCommandSide_AddDomainPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewDomainPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- true,
- true,
- true,
- ),
- ),
- },
+ org.NewDomainPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ true,
+ true,
+ true,
+ ),
),
),
},
@@ -202,38 +197,26 @@ func TestCommandSide_AddDomainPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewDomainPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- true,
- true,
- true,
- ),
- ),
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "user1@org.com",
- "user1",
- true,
- user.UsernameChangedEventWithPolicyChange(),
- ),
- ),
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user2", "org1").Aggregate,
- "user@test.com",
- "user@test.com",
- true,
- user.UsernameChangedEventWithPolicyChange(),
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("user1@org.com", "org1", false)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("user1", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("user@test.com", "org1", false)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("user@test.com", "org1", true)),
+ org.NewDomainPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ true,
+ true,
+ true,
+ ),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "user1@org.com",
+ "user1",
+ true,
+ user.UsernameChangedEventWithPolicyChange(),
+ ),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user2", "org1").Aggregate,
+ "user@test.com",
+ "user@test.com",
+ true,
+ user.UsernameChangedEventWithPolicyChange(),
+ ),
),
),
},
@@ -371,14 +354,10 @@ func TestCommandSide_ChangeDomainPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDomainPolicyChangedEvent(context.Background(), "org1",
- policy.ChangeValidateOrgDomains(false),
- policy.ChangeSMTPSenderAddressMatchesInstanceDomain(false),
- ),
- ),
- },
+ newDomainPolicyChangedEvent(context.Background(), "org1",
+ policy.ChangeValidateOrgDomains(false),
+ policy.ChangeSMTPSenderAddressMatchesInstanceDomain(false),
+ ),
),
),
},
@@ -440,26 +419,18 @@ func TestCommandSide_ChangeDomainPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newDomainPolicyChangedEvent(context.Background(), "org1",
- policy.ChangeUserLoginMustBeDomain(false),
- policy.ChangeValidateOrgDomains(false),
- policy.ChangeSMTPSenderAddressMatchesInstanceDomain(false),
- ),
- ),
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "user1",
- "user1@org.com",
- false,
- user.UsernameChangedEventWithPolicyChange(),
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("user1", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("user1@org.com", "org1", false)),
+ newDomainPolicyChangedEvent(context.Background(), "org1",
+ policy.ChangeUserLoginMustBeDomain(false),
+ policy.ChangeValidateOrgDomains(false),
+ policy.ChangeSMTPSenderAddressMatchesInstanceDomain(false),
+ ),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "user1",
+ "user1@org.com",
+ false,
+ user.UsernameChangedEventWithPolicyChange(),
+ ),
),
),
},
@@ -570,12 +541,8 @@ func TestCommandSide_RemoveDomainPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewDomainPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewDomainPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
@@ -644,23 +611,16 @@ func TestCommandSide_RemoveDomainPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewDomainPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "user1",
- "user1@org.com",
- false,
- user.UsernameChangedEventWithPolicyChange(),
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("user1", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("user1@org.com", "org1", false)),
+ org.NewDomainPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ ),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "user1",
+ "user1@org.com",
+ false,
+ user.UsernameChangedEventWithPolicyChange(),
+ ),
),
),
},
diff --git a/internal/command/org_policy_label_test.go b/internal/command/org_policy_label_test.go
index c4fc41edf7..d317b8cd81 100644
--- a/internal/command/org_policy_label_test.go
+++ b/internal/command/org_policy_label_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -109,24 +108,20 @@ func TestCommandSide_AddLabelPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- "#ffffff",
- true,
- true,
- true,
- ),
- ),
- },
+ org.NewLabelPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ "#ffffff",
+ true,
+ true,
+ true,
+ ),
),
),
},
@@ -315,24 +310,20 @@ func TestCommandSide_ChangeLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newLabelPolicyChangedEvent(
- context.Background(),
- "org1",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- "#000000",
- false,
- false,
- false),
- ),
- },
+ newLabelPolicyChangedEvent(
+ context.Background(),
+ "org1",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ "#000000",
+ false,
+ false,
+ false),
),
),
},
@@ -464,12 +455,8 @@ func TestCommandSide_ActivateLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyActivatedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewLabelPolicyActivatedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
@@ -568,12 +555,8 @@ func TestCommandSide_RemoveLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewLabelPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
static: mock.NewMockStorage(gomock.NewController(t)).ExpectRemoveObjectsNoError(),
@@ -735,14 +718,10 @@ func TestCommandSide_AddLogoLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyLogoAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "logo",
- ),
- ),
- },
+ org.NewLabelPolicyLogoAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "logo",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -869,14 +848,10 @@ func TestCommandSide_RemoveLogoLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyLogoRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- ),
- ),
- },
+ org.NewLabelPolicyLogoRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ ),
),
),
},
@@ -1045,14 +1020,10 @@ func TestCommandSide_AddIconLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyIconAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "icon",
- ),
- ),
- },
+ org.NewLabelPolicyIconAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "icon",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -1177,14 +1148,10 @@ func TestCommandSide_RemoveIconLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyIconRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- ),
- ),
- },
+ org.NewLabelPolicyIconRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ ),
),
),
},
@@ -1352,14 +1319,10 @@ func TestCommandSide_AddLogoDarkLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyLogoDarkAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "logo",
- ),
- ),
- },
+ org.NewLabelPolicyLogoDarkAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "logo",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -1486,14 +1449,10 @@ func TestCommandSide_RemoveLogoDarkLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyLogoDarkRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- ),
- ),
- },
+ org.NewLabelPolicyLogoDarkRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ ),
),
),
},
@@ -1662,14 +1621,10 @@ func TestCommandSide_AddIconDarkLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyIconDarkAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "icon",
- ),
- ),
- },
+ org.NewLabelPolicyIconDarkAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "icon",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -1792,14 +1747,10 @@ func TestCommandSide_RemoveIconDarkLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyIconDarkRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- ),
- ),
- },
+ org.NewLabelPolicyIconDarkRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ ),
),
),
},
@@ -1959,14 +1910,10 @@ func TestCommandSide_AddFontLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyFontAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "font",
- ),
- ),
- },
+ org.NewLabelPolicyFontAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "font",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -2089,14 +2036,10 @@ func TestCommandSide_RemoveFontLabelPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLabelPolicyFontRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "key",
- ),
- ),
- },
+ org.NewLabelPolicyFontRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "key",
+ ),
),
),
},
diff --git a/internal/command/org_policy_lockout_test.go b/internal/command/org_policy_lockout_test.go
index e33917963a..0cb7c056de 100644
--- a/internal/command/org_policy_lockout_test.go
+++ b/internal/command/org_policy_lockout_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -87,15 +86,11 @@ func TestCommandSide_AddPasswordLockoutPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLockoutPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- 10,
- true,
- ),
- ),
- },
+ org.NewLockoutPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ 10,
+ true,
+ ),
),
),
},
@@ -238,11 +233,7 @@ func TestCommandSide_ChangePasswordLockoutPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newPasswordLockoutPolicyChangedEvent(context.Background(), "org1", 5, false),
- ),
- },
+ newPasswordLockoutPolicyChangedEvent(context.Background(), "org1", 5, false),
),
),
},
@@ -348,12 +339,8 @@ func TestCommandSide_RemovePasswordLockoutPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLockoutPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewLockoutPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
diff --git a/internal/command/org_policy_login_test.go b/internal/command/org_policy_login_test.go
index 54d48062df..c04e5a7090 100644
--- a/internal/command/org_policy_login_test.go
+++ b/internal/command/org_policy_login_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -107,30 +106,26 @@ func TestCommandSide_AddLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- domain.PasswordlessTypeAllowed,
- "https://example.com/redirect",
- time.Hour*1,
- time.Hour*2,
- time.Hour*3,
- time.Hour*4,
- time.Hour*5,
- ),
- ),
- },
+ org.NewLoginPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ domain.PasswordlessTypeAllowed,
+ "https://example.com/redirect",
+ time.Hour*1,
+ time.Hour*2,
+ time.Hour*3,
+ time.Hour*4,
+ time.Hour*5,
+ ),
),
),
},
@@ -205,42 +200,34 @@ func TestCommandSide_AddLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- domain.PasswordlessTypeAllowed,
- "https://example.com/redirect",
- time.Hour*1,
- time.Hour*2,
- time.Hour*3,
- time.Hour*4,
- time.Hour*5,
- ),
- ),
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeTOTP,
- ),
- ),
- eventFromEventPusher(
- org.NewLoginPolicyMultiFactorAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.MultiFactorTypeU2FWithPIN,
- ),
- ),
- },
+ org.NewLoginPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ domain.PasswordlessTypeAllowed,
+ "https://example.com/redirect",
+ time.Hour*1,
+ time.Hour*2,
+ time.Hour*3,
+ time.Hour*4,
+ time.Hour*5,
+ ),
+ org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeTOTP,
+ ),
+ org.NewLoginPolicyMultiFactorAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.MultiFactorTypeU2FWithPIN,
+ ),
),
),
},
@@ -336,37 +323,31 @@ func TestCommandSide_AddLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- true,
- domain.PasswordlessTypeAllowed,
- "https://example.com/redirect",
- time.Hour*1,
- time.Hour*2,
- time.Hour*3,
- time.Hour*4,
- time.Hour*5,
- ),
- ),
- eventFromEventPusher(
- org.NewIdentityProviderAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1",
- domain.IdentityProviderTypeSystem,
- ),
- ),
- },
+ org.NewLoginPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ true,
+ domain.PasswordlessTypeAllowed,
+ "https://example.com/redirect",
+ time.Hour*1,
+ time.Hour*2,
+ time.Hour*3,
+ time.Hour*4,
+ time.Hour*5,
+ ),
+ org.NewIdentityProviderAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1",
+ domain.IdentityProviderTypeSystem,
+ ),
),
),
},
@@ -561,30 +542,26 @@ func TestCommandSide_ChangeLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newLoginPolicyChangedEvent(context.Background(),
- "org1",
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- false,
- domain.PasswordlessTypeNotAllowed,
- "",
- &duration10,
- &duration20,
- &duration30,
- &duration40,
- &duration50,
- ),
- ),
- },
+ newLoginPolicyChangedEvent(context.Background(),
+ "org1",
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ false,
+ domain.PasswordlessTypeNotAllowed,
+ "",
+ &duration10,
+ &duration20,
+ &duration30,
+ &duration40,
+ &duration50,
+ ),
),
),
},
@@ -714,12 +691,8 @@ func TestCommandSide_RemoveLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewLoginPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
@@ -981,14 +954,10 @@ func TestCommandSide_AddIDPProviderLoginPolicy(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewIdentityProviderAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1",
- domain.IdentityProviderTypeOrg),
- ),
- },
+ org.NewIdentityProviderAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1",
+ domain.IdentityProviderTypeOrg),
),
),
},
@@ -1247,13 +1216,9 @@ func TestCommandSide_RemoveIDPProviderLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewIdentityProviderRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1"),
- ),
- },
+ org.NewIdentityProviderRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1"),
),
),
},
@@ -1311,13 +1276,9 @@ func TestCommandSide_RemoveIDPProviderLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewIdentityProviderRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1"),
- ),
- },
+ org.NewIdentityProviderRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1"),
),
),
},
@@ -1390,18 +1351,14 @@ func TestCommandSide_RemoveIDPProviderLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewIdentityProviderRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "config1"),
- ),
- eventFromEventPusher(
- user.NewUserIDPLinkCascadeRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "config1", "externaluser1")),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUserIDPLinkUniqueConstraint("config1", "externaluser1")),
+ org.NewIdentityProviderRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "config1",
+ ),
+ user.NewUserIDPLinkCascadeRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "config1", "externaluser1",
+ ),
),
),
},
@@ -1527,13 +1484,9 @@ func TestCommandSide_AddSecondFactorLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeTOTP),
- ),
- },
+ org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeTOTP),
),
),
},
@@ -1553,13 +1506,9 @@ func TestCommandSide_AddSecondFactorLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeOTPEmail),
- ),
- },
+ org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeOTPEmail),
),
),
},
@@ -1579,13 +1528,9 @@ func TestCommandSide_AddSecondFactorLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeOTPSMS),
- ),
- },
+ org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeOTPSMS),
),
),
},
@@ -1612,13 +1557,9 @@ func TestCommandSide_AddSecondFactorLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeOTPSMS),
- ),
- },
+ org.NewLoginPolicySecondFactorAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeOTPSMS),
),
),
},
@@ -1821,13 +1762,9 @@ func TestCommandSide_RemoveSecondFactoroginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeTOTP),
- ),
- },
+ org.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeTOTP),
),
),
},
@@ -1856,13 +1793,9 @@ func TestCommandSide_RemoveSecondFactoroginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeOTPEmail),
- ),
- },
+ org.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeOTPEmail),
),
),
},
@@ -1891,13 +1824,9 @@ func TestCommandSide_RemoveSecondFactoroginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.SecondFactorTypeOTPSMS),
- ),
- },
+ org.NewLoginPolicySecondFactorRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.SecondFactorTypeOTPSMS),
),
),
},
@@ -2009,13 +1938,9 @@ func TestCommandSide_AddMultiFactorLoginPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicyMultiFactorAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.MultiFactorTypeU2FWithPIN),
- ),
- },
+ org.NewLoginPolicyMultiFactorAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.MultiFactorTypeU2FWithPIN),
),
),
},
@@ -2158,13 +2083,9 @@ func TestCommandSide_RemoveMultiFactorLoginPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewLoginPolicyMultiFactorRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- domain.MultiFactorTypeU2FWithPIN),
- ),
- },
+ org.NewLoginPolicyMultiFactorRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ domain.MultiFactorTypeU2FWithPIN),
),
),
},
diff --git a/internal/command/org_policy_mail_template_test.go b/internal/command/org_policy_mail_template_test.go
index f2be80df62..ab4d1b1b9a 100644
--- a/internal/command/org_policy_mail_template_test.go
+++ b/internal/command/org_policy_mail_template_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -84,14 +83,10 @@ func TestCommandSide_AddMailTemplate(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewMailTemplateAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- []byte("template"),
- ),
- ),
- },
+ org.NewMailTemplateAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ []byte("template"),
+ ),
),
),
},
@@ -227,11 +222,7 @@ func TestCommandSide_ChangeMailTemplate(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newMailTemplateChangedEvent(context.Background(), "org1", "template2"),
- ),
- },
+ newMailTemplateChangedEvent(context.Background(), "org1", "template2"),
),
),
},
@@ -334,12 +325,8 @@ func TestCommandSide_RemoveMailTemplate(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewMailTemplateRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewMailTemplateRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
diff --git a/internal/command/org_policy_notification_test.go b/internal/command/org_policy_notification_test.go
index 7b568ebfdf..5b780b892a 100644
--- a/internal/command/org_policy_notification_test.go
+++ b/internal/command/org_policy_notification_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -80,14 +79,10 @@ func TestCommandSide_AddNotificationPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewNotificationPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- true,
- ),
- ),
- },
+ org.NewNotificationPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ true,
+ ),
),
),
},
@@ -109,14 +104,10 @@ func TestCommandSide_AddNotificationPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewNotificationPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- false,
- ),
- ),
- },
+ org.NewNotificationPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ false,
+ ),
),
),
},
@@ -240,11 +231,7 @@ func TestCommandSide_ChangeNotificationPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newNotificationPolicyChangedEvent(context.Background(), "org1", false),
- ),
- },
+ newNotificationPolicyChangedEvent(context.Background(), "org1", false),
),
),
},
@@ -341,12 +328,8 @@ func TestCommandSide_RemoveNotificationPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewNotificationPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewNotificationPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
diff --git a/internal/command/org_policy_password_age_test.go b/internal/command/org_policy_password_age_test.go
index 17f73e2284..79b703a992 100644
--- a/internal/command/org_policy_password_age_test.go
+++ b/internal/command/org_policy_password_age_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -87,15 +86,11 @@ func TestCommandSide_AddPasswordAgePolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewPasswordAgePolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- 10,
- 365,
- ),
- ),
- },
+ org.NewPasswordAgePolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ 10,
+ 365,
+ ),
),
),
},
@@ -238,11 +233,7 @@ func TestCommandSide_ChangePasswordAgePolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newPasswordAgePolicyChangedEvent(context.Background(), "org1", 150, 5),
- ),
- },
+ newPasswordAgePolicyChangedEvent(context.Background(), "org1", 150, 5),
),
),
},
@@ -348,12 +339,8 @@ func TestCommandSide_RemovePasswordAgePolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewPasswordAgePolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewPasswordAgePolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
diff --git a/internal/command/org_policy_password_complexity_test.go b/internal/command/org_policy_password_complexity_test.go
index 44de9259ad..93b73170eb 100644
--- a/internal/command/org_policy_password_complexity_test.go
+++ b/internal/command/org_policy_password_complexity_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -93,15 +92,11 @@ func TestCommandSide_AddPasswordComplexityPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewPasswordComplexityPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- 8,
- true, true, true, true,
- ),
- ),
- },
+ org.NewPasswordComplexityPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ 8,
+ true, true, true, true,
+ ),
),
),
},
@@ -259,11 +254,7 @@ func TestCommandSide_ChangePasswordComplexityPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newPasswordComplexityPolicyChangedEvent(context.Background(), "org1", 10, false, false, false, false),
- ),
- },
+ newPasswordComplexityPolicyChangedEvent(context.Background(), "org1", 10, false, false, false, false),
),
),
},
@@ -375,12 +366,8 @@ func TestCommandSide_RemovePasswordComplexityPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewPasswordComplexityPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewPasswordComplexityPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
diff --git a/internal/command/org_policy_privacy_test.go b/internal/command/org_policy_privacy_test.go
index 986e7a0213..bc5e448850 100644
--- a/internal/command/org_policy_privacy_test.go
+++ b/internal/command/org_policy_privacy_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -93,17 +92,13 @@ func TestCommandSide_AddPrivacyPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewPrivacyPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "TOSLink",
- "PrivacyLink",
- "HelpLink",
- "support@example.com",
- ),
- ),
- },
+ org.NewPrivacyPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "TOSLink",
+ "PrivacyLink",
+ "HelpLink",
+ "support@example.com",
+ ),
),
),
},
@@ -158,17 +153,13 @@ func TestCommandSide_AddPrivacyPolicy(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewPrivacyPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "",
- "",
- "",
- "",
- ),
- ),
- },
+ org.NewPrivacyPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "",
+ "",
+ "",
+ "",
+ ),
),
),
},
@@ -341,11 +332,7 @@ func TestCommandSide_ChangePrivacyPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newPrivacyPolicyChangedEvent(context.Background(), "org1", "TOSLinkChange", "PrivacyLinkChange", "HelpLinkChange", "support2@example.com"),
- ),
- },
+ newPrivacyPolicyChangedEvent(context.Background(), "org1", "TOSLinkChange", "PrivacyLinkChange", "HelpLinkChange", "support2@example.com"),
),
),
},
@@ -389,11 +376,7 @@ func TestCommandSide_ChangePrivacyPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newPrivacyPolicyChangedEvent(context.Background(), "org1", "", "", "", ""),
- ),
- },
+ newPrivacyPolicyChangedEvent(context.Background(), "org1", "", "", "", ""),
),
),
},
@@ -505,12 +488,8 @@ func TestCommandSide_RemovePrivacyPolicy(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewPrivacyPolicyRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate),
- ),
- },
+ org.NewPrivacyPolicyRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate),
),
),
},
diff --git a/internal/command/org_test.go b/internal/command/org_test.go
index 8696b3fb26..6db8654d90 100644
--- a/internal/command/org_test.go
+++ b/internal/command/org_test.go
@@ -15,11 +15,9 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
- "github.com/zitadel/zitadel/internal/repository/member"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -196,31 +194,31 @@ func TestCommandSide_AddOrg(t *testing.T) {
),
expectFilterOrgMemberNotFound(),
expectPushFailed(errors.ThrowAlreadyExists(nil, "id", "internal"),
- []*repository.Event{
- eventFromEventPusher(org.NewOrgAddedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "Org")),
- eventFromEventPusher(org.NewDomainAddedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain")),
- eventFromEventPusher(org.NewDomainVerifiedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain")),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain")),
- eventFromEventPusher(org.NewMemberAddedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "user1", domain.RoleOrgOwner)),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("org2", "user1")),
+ org.NewOrgAddedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "Org",
+ ),
+ org.NewDomainAddedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewDomainVerifiedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewDomainPrimarySetEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewMemberAddedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "user1", domain.RoleOrgOwner,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "org2"),
@@ -264,31 +262,31 @@ func TestCommandSide_AddOrg(t *testing.T) {
),
expectFilterOrgMemberNotFound(),
expectPushFailed(errors.ThrowInternal(nil, "id", "internal"),
- []*repository.Event{
- eventFromEventPusher(org.NewOrgAddedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "Org")),
- eventFromEventPusher(org.NewDomainAddedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain")),
- eventFromEventPusher(org.NewDomainVerifiedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain")),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain")),
- eventFromEventPusher(org.NewMemberAddedEvent(
- context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "user1", domain.RoleOrgOwner)),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("org2", "user1")),
+ org.NewOrgAddedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "Org",
+ ),
+ org.NewDomainAddedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewDomainVerifiedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewDomainPrimarySetEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewMemberAddedEvent(
+ context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "user1", domain.RoleOrgOwner,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "org2"),
@@ -332,31 +330,26 @@ func TestCommandSide_AddOrg(t *testing.T) {
),
expectFilterOrgMemberNotFound(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "Org",
- )),
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate, "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "user1",
- domain.RoleOrgOwner,
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("org2", "user1")),
+ org.NewOrgAddedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "Org",
+ ),
+ org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate, "org.iam-domain",
+ ),
+ org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewDomainPrimarySetEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewMemberAddedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "user1",
+ domain.RoleOrgOwner,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "org2"),
@@ -408,31 +401,26 @@ func TestCommandSide_AddOrg(t *testing.T) {
),
expectFilterOrgMemberNotFound(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "Org",
- )),
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate, "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
- &org.NewAggregate("org2").Aggregate,
- "user1",
- domain.RoleOrgOwner,
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("org2", "user1")),
+ org.NewOrgAddedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "Org",
+ ),
+ org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate, "org.iam-domain",
+ ),
+ org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewDomainPrimarySetEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "org.iam-domain",
+ ),
+ org.NewMemberAddedEvent(context.Background(),
+ &org.NewAggregate("org2").Aggregate,
+ "user1",
+ domain.RoleOrgOwner,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "org2"),
@@ -586,12 +574,9 @@ func TestCommandSide_ChangeOrg(t *testing.T) {
expectFilter(),
expectPushFailed(
errors.ThrowInternal(nil, "id", "message"),
- []*repository.Event{
- eventFromEventPusher(org.NewOrgChangedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "org", "neworg")),
- },
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgNameUniqueConstraint("org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("neworg")),
+ org.NewOrgChangedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "org", "neworg",
+ ),
),
),
},
@@ -634,20 +619,18 @@ func TestCommandSide_ChangeOrg(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgChangedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "org", "neworg")),
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch")),
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch")),
- eventFromEventPusher(org.NewDomainRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "org.zitadel.ch", true)),
- },
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgNameUniqueConstraint("org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("neworg")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("neworg.zitadel.ch")),
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgDomainUniqueConstraint("org.zitadel.ch")),
+ org.NewOrgChangedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "org", "neworg",
+ ),
+ org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch",
+ ),
+ org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch",
+ ),
+ org.NewDomainRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "org.zitadel.ch", true,
+ ),
),
),
},
@@ -693,22 +676,21 @@ func TestCommandSide_ChangeOrg(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgChangedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "org", "neworg")),
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch")),
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch")),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch")),
- eventFromEventPusher(org.NewDomainRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate, "org.zitadel.ch", true)),
- },
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgNameUniqueConstraint("org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("neworg")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("neworg.zitadel.ch")),
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgDomainUniqueConstraint("org.zitadel.ch")),
+ org.NewOrgChangedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "org", "neworg",
+ ),
+ org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch",
+ ),
+ org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch",
+ ),
+ org.NewDomainPrimarySetEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "neworg.zitadel.ch",
+ ),
+ org.NewDomainRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate, "org.zitadel.ch", true,
+ ),
),
),
},
@@ -812,10 +794,9 @@ func TestCommandSide_DeactivateOrg(t *testing.T) {
),
expectPushFailed(
errors.ThrowInternal(nil, "id", "message"),
- []*repository.Event{
- eventFromEventPusher(org.NewOrgDeactivatedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate)),
- },
+ org.NewOrgDeactivatedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ ),
),
),
},
@@ -840,11 +821,9 @@ func TestCommandSide_DeactivateOrg(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgDeactivatedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- )),
- },
+ org.NewOrgDeactivatedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ ),
),
),
},
@@ -871,6 +850,7 @@ func TestCommandSide_DeactivateOrg(t *testing.T) {
})
}
}
+
func TestCommandSide_ReactivateOrg(t *testing.T) {
type fields struct {
eventstore *eventstore.Eventstore
@@ -948,11 +928,9 @@ func TestCommandSide_ReactivateOrg(t *testing.T) {
),
expectPushFailed(
errors.ThrowInternal(nil, "id", "message"),
- []*repository.Event{
- eventFromEventPusher(org.NewOrgReactivatedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- )),
- },
+ org.NewOrgReactivatedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ ),
),
),
},
@@ -981,10 +959,9 @@ func TestCommandSide_ReactivateOrg(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgReactivatedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate)),
- },
+ org.NewOrgReactivatedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ ),
),
),
},
@@ -1117,14 +1094,9 @@ func TestCommandSide_RemoveOrg(t *testing.T) {
expectFilter(),
expectPushFailed(
errors.ThrowInternal(nil, "id", "message"),
- []*repository.Event{
- eventFromEventPusher(
- org.NewOrgRemovedEvent(
- context.Background(), &org.NewAggregate("org1").Aggregate, "org", []string{}, false, []string{}, []*domain.UserIDPLink{}, []string{},
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgNameUniqueConstraint("org")),
+ org.NewOrgRemovedEvent(
+ context.Background(), &org.NewAggregate("org1").Aggregate, "org", []string{}, false, []string{}, []*domain.UserIDPLink{}, []string{},
+ ),
),
),
},
@@ -1164,14 +1136,9 @@ func TestCommandSide_RemoveOrg(t *testing.T) {
expectFilter(),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewOrgRemovedEvent(
- context.Background(), &org.NewAggregate("org1").Aggregate, "org", []string{}, false, []string{}, []*domain.UserIDPLink{}, []string{},
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgNameUniqueConstraint("org")),
+ org.NewOrgRemovedEvent(
+ context.Background(), &org.NewAggregate("org1").Aggregate, "org", []string{}, false, []string{}, []*domain.UserIDPLink{}, []string{},
+ ),
),
),
},
@@ -1199,7 +1166,7 @@ func TestCommandSide_RemoveOrg(t *testing.T) {
eventFromEventPusher(
org.NewDomainPolicyAddedEvent(context.Background(),
&org.NewAggregate("org1").Aggregate,
- true,
+ false,
true,
true,
),
@@ -1217,7 +1184,7 @@ func TestCommandSide_RemoveOrg(t *testing.T) {
language.German,
domain.GenderMale,
"email1",
- true,
+ false,
),
), eventFromEventPusher(
user.NewMachineAddedEvent(context.Background(),
@@ -1225,7 +1192,7 @@ func TestCommandSide_RemoveOrg(t *testing.T) {
"user2",
"name",
"description",
- true,
+ false,
domain.OIDCTokenTypeBearer,
),
),
@@ -1255,26 +1222,13 @@ func TestCommandSide_RemoveOrg(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- org.NewOrgRemovedEvent(context.Background(), &org.NewAggregate("org1").Aggregate, "org",
- []string{"user1", "user2"},
- false,
- []string{"domain1", "domain2"},
- []*domain.UserIDPLink{{IDPConfigID: "config1", ExternalUserID: "id1", DisplayName: "display1"}, {IDPConfigID: "config2", ExternalUserID: "id2", DisplayName: "display2"}},
- []string{"entity1", "entity2"},
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgNameUniqueConstraint("org")),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("user1", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("user2", "org1", true)),
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgDomainUniqueConstraint("domain1")),
- uniqueConstraintsFromEventConstraint(org.NewRemoveOrgDomainUniqueConstraint("domain2")),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUserIDPLinkUniqueConstraint("config1", "id1")),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUserIDPLinkUniqueConstraint("config2", "id2")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("entity1")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("entity2")),
+ org.NewOrgRemovedEvent(context.Background(), &org.NewAggregate("org1").Aggregate, "org",
+ []string{"user1", "user2"},
+ false,
+ []string{"domain1", "domain2"},
+ []*domain.UserIDPLink{{IDPConfigID: "config1", ExternalUserID: "id1", DisplayName: "display1"}, {IDPConfigID: "config2", ExternalUserID: "id2", DisplayName: "display2"}},
+ []string{"entity1", "entity2"},
+ ),
),
),
},
@@ -1428,64 +1382,58 @@ func TestCommandSide_SetUpOrg(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "Org",
- )),
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate, "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "username",
- "firstname",
- "lastname",
- "",
- "firstname lastname",
- language.English,
- domain.GenderUnspecified,
- "email@test.ch",
- true,
- ),
+ eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "Org",
+ )),
+ eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate, "org.iam-domain",
+ )),
+ eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "org.iam-domain",
+ )),
+ eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "org.iam-domain",
+ )),
+ eventFromEventPusher(
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "username",
+ "firstname",
+ "lastname",
+ "",
+ "firstname lastname",
+ language.English,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ true,
),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- ),
+ ),
+ eventFromEventPusher(
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(
- context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("userinit"),
- },
- 1*time.Hour,
- ),
+ ),
+ eventFromEventPusher(
+ user.NewHumanInitialCodeAddedEvent(
+ context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("userinit"),
+ },
+ 1*time.Hour,
),
- eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "userID",
- domain.RoleOrgOwner,
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "orgID", true)),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("orgID", "userID")),
+ ),
+ eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "userID",
+ domain.RoleOrgOwner,
+ )),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "orgID", "userID"),
@@ -1547,31 +1495,26 @@ func TestCommandSide_SetUpOrg(t *testing.T) {
),
expectFilter(), // org member check
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "Org",
- )),
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate, "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "userID",
- domain.RoleOrgOwner,
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("orgID", "userID")),
+ eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "Org",
+ )),
+ eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate, "org.iam-domain",
+ )),
+ eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "org.iam-domain",
+ )),
+ eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "org.iam-domain",
+ )),
+ eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "userID",
+ domain.RoleOrgOwner,
+ )),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "orgID"),
@@ -1632,50 +1575,44 @@ func TestCommandSide_SetUpOrg(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "Org",
- )),
- eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate, "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "org.iam-domain",
- )),
- eventFromEventPusher(
- user.NewMachineAddedEvent(context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "username",
- "name",
- "description",
- true,
- domain.OIDCTokenTypeBearer,
- ),
+ eventFromEventPusher(org.NewOrgAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "Org",
+ )),
+ eventFromEventPusher(org.NewDomainAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate, "org.iam-domain",
+ )),
+ eventFromEventPusher(org.NewDomainVerifiedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "org.iam-domain",
+ )),
+ eventFromEventPusher(org.NewDomainPrimarySetEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "org.iam-domain",
+ )),
+ eventFromEventPusher(
+ user.NewMachineAddedEvent(context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "username",
+ "name",
+ "description",
+ true,
+ domain.OIDCTokenTypeBearer,
),
- eventFromEventPusher(
- user.NewPersonalAccessTokenAddedEvent(context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID",
- testNow.Add(time.Hour),
- []string{openid.ScopeOpenID},
- ),
+ ),
+ eventFromEventPusher(
+ user.NewPersonalAccessTokenAddedEvent(context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID",
+ testNow.Add(time.Hour),
+ []string{openid.ScopeOpenID},
),
- eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
- &org.NewAggregate("orgID").Aggregate,
- "userID",
- domain.RoleOrgOwner,
- )),
- },
- uniqueConstraintsFromEventConstraint(org.NewAddOrgNameUniqueConstraint("Org")),
- uniqueConstraintsFromEventConstraint(org.NewAddOrgDomainUniqueConstraint("org.iam-domain")),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "orgID", true)),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("orgID", "userID")),
+ ),
+ eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
+ &org.NewAggregate("orgID").Aggregate,
+ "userID",
+ domain.RoleOrgOwner,
+ )),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "orgID", "userID", "tokenID"),
diff --git a/internal/command/preparation/command_test.go b/internal/command/preparation/command_test.go
index 7ccd590707..e7b0cb65ce 100644
--- a/internal/command/preparation/command_test.go
+++ b/internal/command/preparation/command_test.go
@@ -167,10 +167,10 @@ type testCommand struct {
eventstore.BaseEvent
}
-func (c *testCommand) Data() interface{} {
+func (c *testCommand) Payload() interface{} {
return nil
}
-func (c *testCommand) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (c *testCommand) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/command/project.go b/internal/command/project.go
index 751d54535f..a561daa90a 100644
--- a/internal/command/project.go
+++ b/internal/command/project.go
@@ -282,7 +282,7 @@ func (c *Commands) RemoveProject(ctx context.Context, projectID, resourceOwner s
return nil, err
}
- uniqueConstraints := make([]*eventstore.EventUniqueConstraint, len(samlEntityIDsAgg.EntityIDs))
+ uniqueConstraints := make([]*eventstore.UniqueConstraint, len(samlEntityIDsAgg.EntityIDs))
for i, entityID := range samlEntityIDsAgg.EntityIDs {
uniqueConstraints[i] = project.NewRemoveSAMLConfigEntityIDUniqueConstraint(entityID.EntityID)
}
diff --git a/internal/command/project_application_api_test.go b/internal/command/project_application_api_test.go
index faf468a6ec..06cfa449c9 100644
--- a/internal/command/project_application_api_test.go
+++ b/internal/command/project_application_api_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -248,29 +247,22 @@ func TestCommandSide_AddAPIApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewApplicationAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- ),
- ),
- eventFromEventPusher(
- project.NewAPIConfigAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "client1@project",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- domain.APIAuthMethodTypeBasic),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddApplicationUniqueConstraint("app", "project1")),
+ project.NewApplicationAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ ),
+ project.NewAPIConfigAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "client1@project",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ domain.APIAuthMethodTypeBasic),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "app1", "client1"),
@@ -316,24 +308,17 @@ func TestCommandSide_AddAPIApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewApplicationAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- ),
- ),
- eventFromEventPusher(
- project.NewAPIConfigAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "client1@project",
- nil,
- domain.APIAuthMethodTypePrivateKeyJWT),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddApplicationUniqueConstraint("app", "project1")),
+ project.NewApplicationAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ ),
+ project.NewAPIConfigAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "client1@project",
+ nil,
+ domain.APIAuthMethodTypePrivateKeyJWT),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "app1", "client1"),
@@ -540,15 +525,11 @@ func TestCommandSide_ChangeAPIApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAPIAppChangedEvent(context.Background(),
- "app1",
- "project1",
- "org1",
- domain.APIAuthMethodTypePrivateKeyJWT),
- ),
- },
+ newAPIAppChangedEvent(context.Background(),
+ "app1",
+ "project1",
+ "org1",
+ domain.APIAuthMethodTypePrivateKeyJWT),
),
),
},
@@ -698,19 +679,16 @@ func TestCommandSide_ChangeAPIApplicationSecret(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewAPIConfigSecretChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- }),
- ),
- },
+ project.NewAPIConfigSecretChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ ),
),
),
},
diff --git a/internal/command/project_application_oidc_test.go b/internal/command/project_application_oidc_test.go
index 86b3c6e04e..85cdf5d5b1 100644
--- a/internal/command/project_application_oidc_test.go
+++ b/internal/command/project_application_oidc_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -294,44 +293,37 @@ func TestCommandSide_AddOIDCApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewApplicationAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- ),
- ),
- eventFromEventPusher(
- project.NewOIDCConfigAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- domain.OIDCVersionV1,
- "app1",
- "client1@project",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- []string{"https://test.ch"},
- []domain.OIDCResponseType{domain.OIDCResponseTypeCode},
- []domain.OIDCGrantType{domain.OIDCGrantTypeAuthorizationCode},
- domain.OIDCApplicationTypeWeb,
- domain.OIDCAuthMethodTypePost,
- []string{"https://test.ch/logout"},
- true,
- domain.OIDCTokenTypeBearer,
- true,
- true,
- true,
- time.Second*1,
- []string{"https://sub.test.ch"},
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddApplicationUniqueConstraint("app", "project1")),
+ project.NewApplicationAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ ),
+ project.NewOIDCConfigAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ domain.OIDCVersionV1,
+ "app1",
+ "client1@project",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ []string{"https://test.ch"},
+ []domain.OIDCResponseType{domain.OIDCResponseTypeCode},
+ []domain.OIDCGrantType{domain.OIDCGrantTypeAuthorizationCode},
+ domain.OIDCApplicationTypeWeb,
+ domain.OIDCAuthMethodTypePost,
+ []string{"https://test.ch/logout"},
+ true,
+ domain.OIDCTokenTypeBearer,
+ true,
+ true,
+ true,
+ time.Second*1,
+ []string{"https://sub.test.ch"},
+ true,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "app1", "client1"),
@@ -643,14 +635,10 @@ func TestCommandSide_ChangeOIDCApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newOIDCAppChangedEvent(context.Background(),
- "app1",
- "project1",
- "org1"),
- ),
- },
+ newOIDCAppChangedEvent(context.Background(),
+ "app1",
+ "project1",
+ "org1"),
),
),
},
@@ -844,19 +832,16 @@ func TestCommandSide_ChangeOIDCApplicationSecret(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewOIDCConfigSecretChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- }),
- ),
- },
+ project.NewOIDCConfigSecretChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ ),
),
),
},
diff --git a/internal/command/project_application_saml_test.go b/internal/command/project_application_saml_test.go
index e2ea8e9d16..a9b74a99e3 100644
--- a/internal/command/project_application_saml_test.go
+++ b/internal/command/project_application_saml_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -185,26 +184,18 @@ func TestCommandSide_AddSAMLApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewApplicationAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- ),
- ),
- eventFromEventPusher(
- project.NewSAMLConfigAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "https://test.com/saml/metadata",
- testMetadata,
- "",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddApplicationUniqueConstraint("app", "project1")),
- uniqueConstraintsFromEventConstraint(project.NewAddSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata")),
+ project.NewApplicationAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ ),
+ project.NewSAMLConfigAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "https://test.com/saml/metadata",
+ testMetadata,
+ "",
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "app1"),
@@ -251,26 +242,18 @@ func TestCommandSide_AddSAMLApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewApplicationAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- ),
- ),
- eventFromEventPusher(
- project.NewSAMLConfigAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "https://test.com/saml/metadata",
- testMetadata,
- "http://localhost:8080/saml/metadata",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddApplicationUniqueConstraint("app", "project1")),
- uniqueConstraintsFromEventConstraint(project.NewAddSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata")),
+ project.NewApplicationAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ ),
+ project.NewSAMLConfigAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "https://test.com/saml/metadata",
+ testMetadata,
+ "http://localhost:8080/saml/metadata",
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "app1"),
@@ -584,20 +567,14 @@ func TestCommandSide_ChangeSAMLApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newSAMLAppChangedEventMetadataURL(context.Background(),
- "app1",
- "project1",
- "org1",
- "https://test.com/saml/metadata",
- "https://test2.com/saml/metadata",
- testMetadataChangedEntityID,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata")),
- uniqueConstraintsFromEventConstraint(project.NewAddSAMLConfigEntityIDUniqueConstraint("https://test2.com/saml/metadata")),
+ newSAMLAppChangedEventMetadataURL(context.Background(),
+ "app1",
+ "project1",
+ "org1",
+ "https://test.com/saml/metadata",
+ "https://test2.com/saml/metadata",
+ testMetadataChangedEntityID,
+ ),
),
),
httpClient: newTestClient(http.StatusOK, testMetadataChangedEntityID),
@@ -656,20 +633,14 @@ func TestCommandSide_ChangeSAMLApplication(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newSAMLAppChangedEventMetadata(context.Background(),
- "app1",
- "project1",
- "org1",
- "https://test.com/saml/metadata",
- "https://test2.com/saml/metadata",
- testMetadataChangedEntityID,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata")),
- uniqueConstraintsFromEventConstraint(project.NewAddSAMLConfigEntityIDUniqueConstraint("https://test2.com/saml/metadata")),
+ newSAMLAppChangedEventMetadata(context.Background(),
+ "app1",
+ "project1",
+ "org1",
+ "https://test.com/saml/metadata",
+ "https://test2.com/saml/metadata",
+ testMetadataChangedEntityID,
+ ),
),
),
httpClient: nil,
diff --git a/internal/command/project_application_test.go b/internal/command/project_application_test.go
index 1079006088..95e808dd5d 100644
--- a/internal/command/project_application_test.go
+++ b/internal/command/project_application_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/project"
)
@@ -153,16 +152,12 @@ func TestCommandSide_ChangeApplication(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewApplicationChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- "app changed",
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveApplicationUniqueConstraint("app", "project1")),
- uniqueConstraintsFromEventConstraint(project.NewAddApplicationUniqueConstraint("app changed", "project1")),
+ project.NewApplicationChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ "app changed",
+ ),
),
),
},
@@ -314,12 +309,10 @@ func TestCommandSide_DeactivateApplication(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewApplicationDeactivatedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- )),
- },
+ project.NewApplicationDeactivatedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ ),
),
),
},
@@ -468,12 +461,10 @@ func TestCommandSide_ReactivateApplication(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewApplicationReactivatedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- )),
- },
+ project.NewApplicationReactivatedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ ),
),
),
},
@@ -608,16 +599,12 @@ func TestCommandSide_RemoveApplication(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewApplicationRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- "https://test.com/saml/metadata",
- )),
- }, /**/
- uniqueConstraintsFromEventConstraint(project.NewRemoveApplicationUniqueConstraint("app", "project1")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata")),
+ project.NewApplicationRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ "https://test.com/saml/metadata",
+ ),
),
),
},
@@ -648,15 +635,12 @@ func TestCommandSide_RemoveApplication(t *testing.T) {
// app is not saml, or no saml config available
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewApplicationRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "app1",
- "app",
- "",
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveApplicationUniqueConstraint("app", "project1")),
+ project.NewApplicationRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "app1",
+ "app",
+ "",
+ ),
),
),
},
diff --git a/internal/command/project_grant_member_test.go b/internal/command/project_grant_member_test.go
index 1282ba1a01..da00b8ccd5 100644
--- a/internal/command/project_grant_member_test.go
+++ b/internal/command/project_grant_member_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -179,15 +178,12 @@ func TestCommandSide_AddProjectGrantMember(t *testing.T) {
),
expectFilter(),
expectPushFailed(caos_errs.ThrowAlreadyExists(nil, "ERROR", "internal"),
- []*repository.Event{
- eventFromEventPusher(project.NewProjectGrantMemberAddedEvent(context.Background(),
- &project.NewAggregate("project1", "").Aggregate,
- "user1",
- "projectgrant1",
- []string{"PROJECT_GRANT_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectGrantMemberUniqueConstraint("project1", "user1", "projectgrant1")),
+ project.NewProjectGrantMemberAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "").Aggregate,
+ "user1",
+ "projectgrant1",
+ []string{"PROJECT_GRANT_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -234,15 +230,12 @@ func TestCommandSide_AddProjectGrantMember(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectGrantMemberAddedEvent(context.Background(),
- &project.NewAggregate("project1", "").Aggregate,
- "user1",
- "projectgrant1",
- []string{"PROJECT_GRANT_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectGrantMemberUniqueConstraint("project1", "user1", "projectgrant1")),
+ project.NewProjectGrantMemberAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "").Aggregate,
+ "user1",
+ "projectgrant1",
+ []string{"PROJECT_GRANT_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -435,14 +428,12 @@ func TestCommandSide_ChangeProjectGrantMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectGrantMemberChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- "projectgrant1",
- []string{"PROJECT_GRANT_OWNER", "PROJECT_GRANT_VIEWER"}...,
- )),
- },
+ project.NewProjectGrantMemberChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ "projectgrant1",
+ []string{"PROJECT_GRANT_OWNER", "PROJECT_GRANT_VIEWER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -603,14 +594,11 @@ func TestCommandSide_RemoveProjectGrantMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectGrantMemberRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- "projectgrant1",
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectGrantMemberUniqueConstraint("project1", "user1", "projectgrant1")),
+ project.NewProjectGrantMemberRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ "projectgrant1",
+ ),
),
),
},
diff --git a/internal/command/project_grant_test.go b/internal/command/project_grant_test.go
index 2ca78ce2a0..af74c8db0f 100644
--- a/internal/command/project_grant_test.go
+++ b/internal/command/project_grant_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -176,15 +175,12 @@ func TestCommandSide_AddProjectGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- "grantedorg1",
- []string{"key1"},
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectGrantUniqueConstraint("grantedorg1", "project1")),
+ project.NewGrantAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ "grantedorg1",
+ []string{"key1"},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "projectgrant1"),
@@ -513,13 +509,11 @@ func TestCommandSide_ChangeProjectGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- []string{"key1", "key2"},
- )),
- },
+ project.NewGrantChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ []string{"key1", "key2"},
+ ),
),
),
},
@@ -594,13 +588,11 @@ func TestCommandSide_ChangeProjectGrant(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- []string{"key1"},
- )),
- },
+ project.NewGrantChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ []string{"key1"},
+ ),
),
),
},
@@ -685,17 +677,15 @@ func TestCommandSide_ChangeProjectGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- []string{"key1"},
- )),
- eventFromEventPusher(usergrant.NewUserGrantCascadeChangedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- []string{"key1"},
- )),
- },
+ project.NewGrantChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ []string{"key1"},
+ ),
+ usergrant.NewUserGrantCascadeChangedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ []string{"key1"},
+ ),
),
),
},
@@ -903,12 +893,10 @@ func TestCommandSide_DeactivateProjectGrant(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantDeactivateEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- )),
- },
+ project.NewGrantDeactivateEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ ),
),
),
},
@@ -1102,12 +1090,10 @@ func TestCommandSide_ReactivateProjectGrant(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantReactivatedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- )),
- },
+ project.NewGrantReactivatedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ ),
),
),
},
@@ -1264,14 +1250,11 @@ func TestCommandSide_RemoveProjectGrant(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- "grantedorg1",
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectGrantUniqueConstraint("grantedorg1", "project1")),
+ project.NewGrantRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ "grantedorg1",
+ ),
),
),
},
@@ -1311,14 +1294,11 @@ func TestCommandSide_RemoveProjectGrant(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- "grantedorg1",
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectGrantUniqueConstraint("grantedorg1", "project1")),
+ project.NewGrantRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ "grantedorg1",
+ ),
),
),
},
@@ -1365,21 +1345,17 @@ func TestCommandSide_RemoveProjectGrant(t *testing.T) {
"projectgrant1",
[]string{"key1"}))),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewGrantRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- "grantedorg1",
- )),
- eventFromEventPusher(usergrant.NewUserGrantCascadeRemovedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- "user1",
- "project1",
- "projectgrant1",
- )),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectGrantUniqueConstraint("grantedorg1", "project1")),
- uniqueConstraintsFromEventConstraint(usergrant.NewRemoveUserGrantUniqueConstraint("org1", "user1", "project1", "projectgrant1")),
+ project.NewGrantRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ "grantedorg1",
+ ),
+ usergrant.NewUserGrantCascadeRemovedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ "user1",
+ "project1",
+ "projectgrant1",
+ ),
),
),
},
diff --git a/internal/command/project_member_test.go b/internal/command/project_member_test.go
index db46c7a7b9..fd6a4105e2 100644
--- a/internal/command/project_member_test.go
+++ b/internal/command/project_member_test.go
@@ -9,9 +9,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/repository/member"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
"golang.org/x/text/language"
@@ -181,14 +179,11 @@ func TestCommandSide_AddProjectMember(t *testing.T) {
),
expectFilter(),
expectPushFailed(caos_errs.ThrowAlreadyExists(nil, "ERROR", "internal"),
- []*repository.Event{
- eventFromEventPusher(project.NewProjectMemberAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- []string{"PROJECT_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("project1", "user1")),
+ project.NewProjectMemberAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ []string{"PROJECT_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -235,14 +230,11 @@ func TestCommandSide_AddProjectMember(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectMemberAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- []string{"PROJECT_OWNER"}...,
- )),
- },
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("project1", "user1")),
+ project.NewProjectMemberAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ []string{"PROJECT_OWNER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -435,13 +427,11 @@ func TestCommandSide_ChangeProjectMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectMemberChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- []string{"PROJECT_OWNER", "PROJECT_VIEWER"}...,
- )),
- },
+ project.NewProjectMemberChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ []string{"PROJECT_OWNER", "PROJECT_VIEWER"}...,
+ ),
),
),
zitadelRoles: []authz.RoleMapping{
@@ -583,13 +573,10 @@ func TestCommandSide_RemoveProjectMember(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectMemberRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- )),
- },
- uniqueConstraintsFromEventConstraint(member.NewRemoveMemberUniqueConstraint("project1", "user1")),
+ project.NewProjectMemberRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ ),
),
),
},
diff --git a/internal/command/project_role_test.go b/internal/command/project_role_test.go
index e7b752fec6..2d40cdc913 100644
--- a/internal/command/project_role_test.go
+++ b/internal/command/project_role_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/usergrant"
@@ -115,17 +114,13 @@ func TestCommandSide_AddProjectRole(t *testing.T) {
),
),
expectPushFailed(caos_errs.ThrowAlreadyExists(nil, "id", "internal"),
- []*repository.Event{
- eventFromEventPusher(project.NewRoleAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- "key",
- "group",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectRoleUniqueConstraint("key1", "project1")),
+ project.NewRoleAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ "key",
+ "group",
+ ),
),
),
},
@@ -160,17 +155,13 @@ func TestCommandSide_AddProjectRole(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewRoleAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- "key",
- "group",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectRoleUniqueConstraint("key1", "project1")),
+ project.NewRoleAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ "key",
+ "group",
+ ),
),
),
},
@@ -325,26 +316,20 @@ func TestCommandSide_BulkAddProjectRole(t *testing.T) {
),
),
expectPushFailed(caos_errs.ThrowAlreadyExists(nil, "id", "internal"),
- []*repository.Event{
- eventFromEventPusher(project.NewRoleAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- "key",
- "group",
- ),
- ),
- eventFromEventPusher(project.NewRoleAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key2",
- "key2",
- "group",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectRoleUniqueConstraint("key1", "project1")),
- uniqueConstraintsFromEventConstraint(project.NewAddProjectRoleUniqueConstraint("key2", "project1")),
+ project.NewRoleAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ "key",
+ "group",
+ ),
+ project.NewRoleAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key2",
+ "key2",
+ "group",
+ ),
),
),
},
@@ -384,26 +369,20 @@ func TestCommandSide_BulkAddProjectRole(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewRoleAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- "key",
- "group",
- ),
- ),
- eventFromEventPusher(project.NewRoleAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key2",
- "key2",
- "group",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectRoleUniqueConstraint("key1", "project1")),
- uniqueConstraintsFromEventConstraint(project.NewAddProjectRoleUniqueConstraint("key2", "project1")),
+ project.NewRoleAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ "key",
+ "group",
+ ),
+ project.NewRoleAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key2",
+ "key2",
+ "group",
+ ),
),
),
},
@@ -641,11 +620,7 @@ func TestCommandSide_ChangeProjectRole(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRoleChangedEvent(context.Background(), "project1", "org1", "key1", "keychanged", "groupchanged"),
- ),
- },
+ newRoleChangedEvent(context.Background(), "project1", "org1", "key1", "keychanged", "groupchanged"),
),
),
},
@@ -815,15 +790,10 @@ func TestCommandSide_RemoveProjectRole(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewRoleRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectRoleUniqueConstraint("key1", "project1")),
+ project.NewRoleRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ ),
),
),
},
@@ -856,15 +826,10 @@ func TestCommandSide_RemoveProjectRole(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewRoleRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectRoleUniqueConstraint("key1", "project1")),
+ project.NewRoleRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ ),
),
),
},
@@ -907,22 +872,15 @@ func TestCommandSide_RemoveProjectRole(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewRoleRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- ),
- ),
- eventFromEventPusher(
- project.NewGrantCascadeChangedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "projectgrant1",
- []string{},
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectRoleUniqueConstraint("key1", "project1")),
+ project.NewRoleRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ ),
+ project.NewGrantCascadeChangedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "projectgrant1",
+ []string{},
+ ),
),
),
},
@@ -956,15 +914,10 @@ func TestCommandSide_RemoveProjectRole(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewRoleRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectRoleUniqueConstraint("key1", "project1")),
+ project.NewRoleRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ ),
),
),
},
@@ -1006,21 +959,14 @@ func TestCommandSide_RemoveProjectRole(t *testing.T) {
[]string{"key1"})),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewRoleRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "key1",
- ),
- ),
- eventFromEventPusher(
- usergrant.NewUserGrantCascadeChangedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- []string{},
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectRoleUniqueConstraint("key1", "project1")),
+ project.NewRoleRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "key1",
+ ),
+ usergrant.NewUserGrantCascadeChangedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ []string{},
+ ),
),
),
},
diff --git a/internal/command/project_test.go b/internal/command/project_test.go
index 60b77f9e25..715b82f080 100644
--- a/internal/command/project_test.go
+++ b/internal/command/project_test.go
@@ -9,11 +9,9 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
- "github.com/zitadel/zitadel/internal/repository/member"
"github.com/zitadel/zitadel/internal/repository/project"
)
@@ -60,24 +58,18 @@ func TestCommandSide_AddProject(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectPushFailed(errors.ThrowAlreadyExists(nil, "ERROR", "internl"),
- []*repository.Event{
- eventFromEventPusher(project.NewProjectAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "project", true, true, true,
- domain.PrivateLabelingSettingAllowLoginUserResourceOwnerPolicy,
- ),
- ),
- eventFromEventPusher(project.NewProjectMemberAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- []string{domain.RoleProjectOwner}...,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectNameUniqueConstraint("project", "org1")),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("project1", "user1")),
+ project.NewProjectAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "project", true, true, true,
+ domain.PrivateLabelingSettingAllowLoginUserResourceOwnerPolicy,
+ ),
+ project.NewProjectMemberAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ []string{domain.RoleProjectOwner}...,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "project1"),
@@ -104,24 +96,18 @@ func TestCommandSide_AddProject(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectPush(
- []*repository.Event{
- eventFromEventPusher(project.NewProjectAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "project", true, true, true,
- domain.PrivateLabelingSettingAllowLoginUserResourceOwnerPolicy,
- ),
- ),
- eventFromEventPusher(project.NewProjectMemberAddedEvent(
- context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- []string{domain.RoleProjectOwner}...,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewAddProjectNameUniqueConstraint("project", "org1")),
- uniqueConstraintsFromEventConstraint(member.NewAddMemberUniqueConstraint("project1", "user1")),
+ project.NewProjectAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "project", true, true, true,
+ domain.PrivateLabelingSettingAllowLoginUserResourceOwnerPolicy,
+ ),
+ project.NewProjectMemberAddedEvent(
+ context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ []string{domain.RoleProjectOwner}...,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "project1"),
@@ -334,21 +320,16 @@ func TestCommandSide_ChangeProject(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newProjectChangedEvent(context.Background(),
- "project1",
- "org1",
- "project",
- "project-new",
- false,
- false,
- false,
- domain.PrivateLabelingSettingEnforceProjectResourceOwnerPolicy),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectNameUniqueConstraint("project", "org1")),
- uniqueConstraintsFromEventConstraint(project.NewAddProjectNameUniqueConstraint("project-new", "org1")),
+ newProjectChangedEvent(context.Background(),
+ "project1",
+ "org1",
+ "project",
+ "project-new",
+ false,
+ false,
+ false,
+ domain.PrivateLabelingSettingEnforceProjectResourceOwnerPolicy,
+ ),
),
),
},
@@ -394,19 +375,16 @@ func TestCommandSide_ChangeProject(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newProjectChangedEvent(context.Background(),
- "project1",
- "org1",
- "project",
- "",
- false,
- false,
- false,
- domain.PrivateLabelingSettingEnforceProjectResourceOwnerPolicy),
- ),
- },
+ newProjectChangedEvent(context.Background(),
+ "project1",
+ "org1",
+ "",
+ "",
+ false,
+ false,
+ false,
+ domain.PrivateLabelingSettingEnforceProjectResourceOwnerPolicy,
+ ),
),
),
},
@@ -598,12 +576,8 @@ func TestCommandSide_DeactivateProject(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewProjectDeactivatedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate),
- ),
- },
+ project.NewProjectDeactivatedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate),
),
),
},
@@ -778,12 +752,8 @@ func TestCommandSide_ReactivateProject(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewProjectReactivatedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate),
- ),
- },
+ project.NewProjectReactivatedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate),
),
),
},
@@ -932,15 +902,10 @@ func TestCommandSide_RemoveProject(t *testing.T) {
// no saml application events
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewProjectRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "project",
- nil),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectNameUniqueConstraint("project", "org1")),
+ project.NewProjectRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "project",
+ nil),
),
),
},
@@ -985,18 +950,13 @@ func TestCommandSide_RemoveProject(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewProjectRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "project",
- []*eventstore.EventUniqueConstraint{
- project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata"),
- }),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectNameUniqueConstraint("project", "org1")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata")),
+ project.NewProjectRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "project",
+ []*eventstore.UniqueConstraint{
+ project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test.com/saml/metadata"),
+ },
+ ),
),
),
},
@@ -1069,22 +1029,15 @@ func TestCommandSide_RemoveProject(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- project.NewProjectRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "project",
- []*eventstore.EventUniqueConstraint{
- project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test1.com/saml/metadata"),
- project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test2.com/saml/metadata"),
- project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test3.com/saml/metadata"),
- }),
- ),
- },
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectNameUniqueConstraint("project", "org1")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test1.com/saml/metadata")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test2.com/saml/metadata")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test3.com/saml/metadata")),
+ project.NewProjectRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "project",
+ []*eventstore.UniqueConstraint{
+ project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test1.com/saml/metadata"),
+ project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test2.com/saml/metadata"),
+ project.NewRemoveSAMLConfigEntityIDUniqueConstraint("https://test3.com/saml/metadata"),
+ },
+ ),
),
),
},
@@ -1219,103 +1172,3 @@ func TestAddProject(t *testing.T) {
})
}
}
-
-// func TestExistsProject(t *testing.T) {
-// type args struct {
-// filter preparation.FilterToQueryReducer
-// id string
-// resourceOwner string
-// }
-// tests := []struct {
-// name string
-// args args
-// wantExists bool
-// wantErr bool
-// }{
-// {
-// name: "no events",
-// args: args{
-// filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
-// return []eventstore.Event{}, nil
-// },
-// id: "id",
-// resourceOwner: "ro",
-// },
-// wantExists: false,
-// wantErr: false,
-// },
-// {
-// name: "project added",
-// args: args{
-// filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
-// return []eventstore.Event{
-// project.NewProjectAddedEvent(
-// context.Background(),
-// &project.NewAggregate("id", "ro").Aggregate,
-// "name",
-// false,
-// false,
-// false,
-// domain.PrivateLabelingSettingEnforceProjectResourceOwnerPolicy,
-// ),
-// }, nil
-// },
-// id: "id",
-// resourceOwner: "ro",
-// },
-// wantExists: true,
-// wantErr: false,
-// },
-// {
-// name: "project removed",
-// args: args{
-// filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
-// return []eventstore.Event{
-// project.NewProjectAddedEvent(
-// context.Background(),
-// &project.NewAggregate("id", "ro").Aggregate,
-// "name",
-// false,
-// false,
-// false,
-// domain.PrivateLabelingSettingEnforceProjectResourceOwnerPolicy,
-// ),
-// project.NewProjectRemovedEvent(
-// context.Background(),
-// &project.NewAggregate("id", "ro").Aggregate,
-// "name",
-// ),
-// }, nil
-// },
-// id: "id",
-// resourceOwner: "ro",
-// },
-// wantExists: false,
-// wantErr: false,
-// },
-// {
-// name: "error durring filter",
-// args: args{
-// filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
-// return nil, errors.ThrowInternal(nil, "PROJE-Op26p", "Errors.Internal")
-// },
-// id: "id",
-// resourceOwner: "ro",
-// },
-// wantExists: false,
-// wantErr: true,
-// },
-// }
-// for _, tt := range tests {
-// t.Run(tt.name, func(t *testing.T) {
-// gotExists, err := projectWriteModel(context.Background(), tt.args.filter, tt.args.id, tt.args.resourceOwner)
-// if (err != nil) != tt.wantErr {
-// t.Errorf("ExistsUser() error = %v, wantErr %v", err, tt.wantErr)
-// return
-// }
-// if gotExists != tt.wantExists {
-// t.Errorf("ExistsUser() = %v, want %v", gotExists, tt.wantExists)
-// }
-// })
-// }
-// }
diff --git a/internal/command/quota_model.go b/internal/command/quota_model.go
index 23893ea6a2..3c4c87c401 100644
--- a/internal/command/quota_model.go
+++ b/internal/command/quota_model.go
@@ -37,8 +37,8 @@ func newQuotaWriteModel(instanceId, resourceOwner string, unit quota.Unit) *quot
func (wm *quotaWriteModel) Query() *eventstore.SearchQueryBuilder {
query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
ResourceOwner(wm.ResourceOwner).
- AddQuery().
InstanceID(wm.InstanceID).
+ AddQuery().
AggregateTypes(quota.AggregateType).
EventTypes(
quota.AddedEventType,
@@ -51,7 +51,7 @@ func (wm *quotaWriteModel) Query() *eventstore.SearchQueryBuilder {
func (wm *quotaWriteModel) Reduce() error {
for _, event := range wm.Events {
- wm.ChangeDate = event.CreationDate()
+ wm.ChangeDate = event.CreatedAt()
switch e := event.(type) {
case *quota.SetEvent:
wm.rollingAggregateID = e.Aggregate().ID
diff --git a/internal/command/quota_report_test.go b/internal/command/quota_report_test.go
index 214b67ac7c..6c942a3bd0 100644
--- a/internal/command/quota_report_test.go
+++ b/internal/command/quota_report_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/quota"
@@ -68,14 +67,16 @@ func TestQuotaReport_ReportQuotaUsage(t *testing.T) {
args: args{
ctx: authz.WithInstanceID(context.Background(), "INSTANCE"),
dueNotifications: []*quota.NotificationDueEvent{
- {
- Unit: QuotaRequestsAllAuthenticated.Enum(),
- ID: "id",
- CallURL: "url",
- PeriodStart: time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
- Threshold: 1000,
- Usage: 250,
- },
+ quota.NewNotificationDueEvent(
+ context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ QuotaRequestsAllAuthenticated.Enum(),
+ "id",
+ "url",
+ time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
+ 1000,
+ 250,
+ ),
},
},
res: res{},
@@ -87,20 +88,15 @@ func TestQuotaReport_ReportQuotaUsage(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewNotificationDueEvent(context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- QuotaRequestsAllAuthenticated.Enum(),
- "id",
- "url",
- time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
- 1000,
- 250,
- ),
- ),
- },
+ quota.NewNotificationDueEvent(context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ QuotaRequestsAllAuthenticated.Enum(),
+ "id",
+ "url",
+ time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
+ 1000,
+ 250,
+ ),
),
),
},
@@ -143,32 +139,24 @@ func TestQuotaReport_ReportQuotaUsage(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewNotificationDueEvent(context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- QuotaRequestsAllAuthenticated.Enum(),
- "id1",
- "url",
- time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
- 1000,
- 250,
- ),
- ),
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewNotificationDueEvent(context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- QuotaRequestsAllAuthenticated.Enum(),
- "id3",
- "url",
- time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
- 1000,
- 250,
- ),
- ),
- },
+ quota.NewNotificationDueEvent(context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ QuotaRequestsAllAuthenticated.Enum(),
+ "id1",
+ "url",
+ time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
+ 1000,
+ 250,
+ ),
+ quota.NewNotificationDueEvent(context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ QuotaRequestsAllAuthenticated.Enum(),
+ "id3",
+ "url",
+ time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
+ 1000,
+ 250,
+ ),
),
),
},
@@ -250,25 +238,20 @@ func TestQuotaReport_UsageNotificationSent(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewNotifiedEvent(
- context.Background(),
- "quota1",
- quota.NewNotificationDueEvent(
- context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- QuotaRequestsAllAuthenticated.Enum(),
- "id1",
- "url",
- time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
- 1000,
- 250,
- ),
- ),
+ quota.NewNotifiedEvent(
+ context.Background(),
+ "quota1",
+ quota.NewNotificationDueEvent(
+ context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ QuotaRequestsAllAuthenticated.Enum(),
+ "id1",
+ "url",
+ time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC),
+ 1000,
+ 250,
),
- },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "quota1"),
diff --git a/internal/command/quota_test.go b/internal/command/quota_test.go
index 75c8e6bdbd..5b28f3e610 100644
--- a/internal/command/quota_test.go
+++ b/internal/command/quota_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errors "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/quota"
@@ -108,24 +107,19 @@ func TestQuota_AddQuota(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewSetEvent(
- eventstore.NewBaseEventForPush(
- context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- quota.SetEventType,
- ),
- QuotaRequestsAllAuthenticated.Enum(),
- quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
- quota.ChangeResetInterval(30*24*time.Hour),
- quota.ChangeAmount(1000),
- quota.ChangeLimit(true),
- quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
- ),
+ quota.NewSetEvent(
+ eventstore.NewBaseEventForPush(
+ context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ quota.SetEventType,
),
- },
+ QuotaRequestsAllAuthenticated.Enum(),
+ quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
+ quota.ChangeResetInterval(30*24*time.Hour),
+ quota.ChangeAmount(1000),
+ quota.ChangeLimit(true),
+ quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "quota1"),
@@ -178,24 +172,19 @@ func TestQuota_AddQuota(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewSetEvent(
- eventstore.NewBaseEventForPush(
- context.Background(),
- "a.NewAggregate("quota2", "INSTANCE").Aggregate,
- quota.SetEventType,
- ),
- QuotaRequestsAllAuthenticated.Enum(),
- quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
- quota.ChangeResetInterval(30*24*time.Hour),
- quota.ChangeAmount(1000),
- quota.ChangeLimit(true),
- quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
- ),
+ quota.NewSetEvent(
+ eventstore.NewBaseEventForPush(
+ context.Background(),
+ "a.NewAggregate("quota2", "INSTANCE").Aggregate,
+ quota.SetEventType,
),
- },
+ QuotaRequestsAllAuthenticated.Enum(),
+ quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
+ quota.ChangeResetInterval(30*24*time.Hour),
+ quota.ChangeAmount(1000),
+ quota.ChangeLimit(true),
+ quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "quota2"),
@@ -224,31 +213,26 @@ func TestQuota_AddQuota(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewSetEvent(
- eventstore.NewBaseEventForPush(
- context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- quota.SetEventType,
- ),
- QuotaRequestsAllAuthenticated.Enum(),
- quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
- quota.ChangeResetInterval(30*24*time.Hour),
- quota.ChangeAmount(1000),
- quota.ChangeLimit(true),
- quota.ChangeNotifications(
- []*quota.SetEventNotification{{
- ID: "notification1",
- Percent: 20,
- Repeat: false,
- CallURL: "https://url.com",
- }},
- ),
- ),
+ quota.NewSetEvent(
+ eventstore.NewBaseEventForPush(
+ context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ quota.SetEventType,
),
- },
+ QuotaRequestsAllAuthenticated.Enum(),
+ quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
+ quota.ChangeResetInterval(30*24*time.Hour),
+ quota.ChangeAmount(1000),
+ quota.ChangeLimit(true),
+ quota.ChangeNotifications(
+ []*quota.SetEventNotification{{
+ ID: "notification1",
+ Percent: 20,
+ Repeat: false,
+ CallURL: "https://url.com",
+ }},
+ ),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "quota1", "notification1"),
@@ -389,24 +373,19 @@ func TestQuota_SetQuota(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewSetEvent(
- eventstore.NewBaseEventForPush(
- context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- quota.SetEventType,
- ),
- QuotaRequestsAllAuthenticated.Enum(),
- quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
- quota.ChangeResetInterval(30*24*time.Hour),
- quota.ChangeAmount(1000),
- quota.ChangeLimit(true),
- quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
- ),
+ quota.NewSetEvent(
+ eventstore.NewBaseEventForPush(
+ context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ quota.SetEventType,
),
- },
+ QuotaRequestsAllAuthenticated.Enum(),
+ quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
+ quota.ChangeResetInterval(30*24*time.Hour),
+ quota.ChangeAmount(1000),
+ quota.ChangeLimit(true),
+ quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "quota1"),
@@ -459,24 +438,19 @@ func TestQuota_SetQuota(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewSetEvent(
- eventstore.NewBaseEventForPush(
- context.Background(),
- "a.NewAggregate("quota2", "INSTANCE").Aggregate,
- quota.SetEventType,
- ),
- QuotaRequestsAllAuthenticated.Enum(),
- quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
- quota.ChangeResetInterval(30*24*time.Hour),
- quota.ChangeAmount(1000),
- quota.ChangeLimit(true),
- quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
- ),
+ quota.NewSetEvent(
+ eventstore.NewBaseEventForPush(
+ context.Background(),
+ "a.NewAggregate("quota2", "INSTANCE").Aggregate,
+ quota.SetEventType,
),
- },
+ QuotaRequestsAllAuthenticated.Enum(),
+ quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
+ quota.ChangeResetInterval(30*24*time.Hour),
+ quota.ChangeAmount(1000),
+ quota.ChangeLimit(true),
+ quota.ChangeNotifications(make([]*quota.SetEventNotification, 0)),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "quota2"),
@@ -505,31 +479,26 @@ func TestQuota_SetQuota(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewSetEvent(
- eventstore.NewBaseEventForPush(
- context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- quota.SetEventType,
- ),
- QuotaRequestsAllAuthenticated.Enum(),
- quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
- quota.ChangeResetInterval(30*24*time.Hour),
- quota.ChangeAmount(1000),
- quota.ChangeLimit(true),
- quota.ChangeNotifications(
- []*quota.SetEventNotification{{
- ID: "notification1",
- Percent: 20,
- Repeat: false,
- CallURL: "https://url.com",
- }},
- ),
- ),
+ quota.NewSetEvent(
+ eventstore.NewBaseEventForPush(
+ context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ quota.SetEventType,
),
- },
+ QuotaRequestsAllAuthenticated.Enum(),
+ quota.ChangeFrom(time.Date(2023, 9, 1, 0, 0, 0, 0, time.UTC)),
+ quota.ChangeResetInterval(30*24*time.Hour),
+ quota.ChangeAmount(1000),
+ quota.ChangeLimit(true),
+ quota.ChangeNotifications(
+ []*quota.SetEventNotification{{
+ ID: "notification1",
+ Percent: 20,
+ Repeat: false,
+ CallURL: "https://url.com",
+ }},
+ ),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "quota1", "notification1"),
@@ -678,16 +647,10 @@ func TestQuota_RemoveQuota(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- quota.NewRemovedEvent(context.Background(),
- "a.NewAggregate("quota1", "INSTANCE").Aggregate,
- QuotaRequestsAllAuthenticated.Enum(),
- ),
- ),
- },
- uniqueConstraintsFromEventConstraintWithInstanceID("INSTANCE", quota.NewRemoveQuotaNameUniqueConstraint(quota.RequestsAllAuthenticated)),
+ quota.NewRemovedEvent(context.Background(),
+ "a.NewAggregate("quota1", "INSTANCE").Aggregate,
+ QuotaRequestsAllAuthenticated.Enum(),
+ ),
),
),
},
diff --git a/internal/command/session_otp_test.go b/internal/command/session_otp_test.go
index 9cf957945f..d01cd40696 100644
--- a/internal/command/session_otp_test.go
+++ b/internal/command/session_otp_test.go
@@ -265,9 +265,7 @@ func TestCommands_OTPSMSSent(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- session.NewOTPSMSSentEvent(context.Background(), &session.NewAggregate("sessionID", "instanceID").Aggregate),
- ),
+ session.NewOTPSMSSentEvent(context.Background(), &session.NewAggregate("sessionID", "instanceID").Aggregate),
),
),
},
@@ -669,9 +667,7 @@ func TestCommands_OTPEmailSent(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- session.NewOTPEmailSentEvent(context.Background(), &session.NewAggregate("sessionID", "instanceID").Aggregate),
- ),
+ session.NewOTPEmailSentEvent(context.Background(), &session.NewAggregate("sessionID", "instanceID").Aggregate),
),
),
},
diff --git a/internal/command/session_test.go b/internal/command/session_test.go
index 57f3ba971c..e478792e1e 100644
--- a/internal/command/session_test.go
+++ b/internal/command/session_test.go
@@ -204,11 +204,9 @@ func TestCommands_CreateSession(t *testing.T) {
[]expect{
expectFilter(),
expectPush(
- eventPusherToEvents(
- session.NewAddedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate),
- session.NewTokenSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- "tokenID",
- ),
+ session.NewAddedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate),
+ session.NewTokenSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ "tokenID",
),
),
},
@@ -438,15 +436,17 @@ func TestCommands_updateSession(t *testing.T) {
fields{
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- session.NewUserCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- "userID", testNow),
- session.NewPasswordCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- testNow),
- session.NewMetadataSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- map[string][]byte{"key": []byte("value")}),
- session.NewTokenSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- "tokenID"),
+ session.NewUserCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ "userID", testNow,
+ ),
+ session.NewPasswordCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ testNow,
+ ),
+ session.NewMetadataSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ map[string][]byte{"key": []byte("value")},
+ ),
+ session.NewTokenSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ "tokenID",
),
),
),
@@ -620,16 +620,14 @@ func TestCommands_updateSession(t *testing.T) {
fields{
eventstore: eventstoreExpect(t,
expectPush(
- eventPusherToEvents(
- session.NewUserCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- "userID", testNow),
- session.NewIntentCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- testNow),
- session.NewMetadataSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- map[string][]byte{"key": []byte("value")}),
- session.NewTokenSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
- "tokenID"),
- ),
+ session.NewUserCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ "userID", testNow),
+ session.NewIntentCheckedEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ testNow),
+ session.NewMetadataSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ map[string][]byte{"key": []byte("value")}),
+ session.NewTokenSetEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate,
+ "tokenID"),
),
),
},
@@ -930,8 +928,7 @@ func TestCommands_TerminateSession(t *testing.T) {
),
expectPushFailed(
caos_errs.ThrowInternal(nil, "id", "pushed failed"),
- eventPusherToEvents(
- session.NewTerminateEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate)),
+ session.NewTerminateEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate),
),
),
tokenVerifier: func(ctx context.Context, sessionToken, sessionID, tokenID string) (err error) {
@@ -960,8 +957,7 @@ func TestCommands_TerminateSession(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- session.NewTerminateEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate)),
+ session.NewTerminateEvent(context.Background(), &session.NewAggregate("sessionID", "org1").Aggregate),
),
),
tokenVerifier: func(ctx context.Context, sessionToken, sessionID, tokenID string) (err error) {
diff --git a/internal/command/sms_config_model.go b/internal/command/sms_config_model.go
index 3db99679c7..2c215ebf6b 100644
--- a/internal/command/sms_config_model.go
+++ b/internal/command/sms_config_model.go
@@ -28,6 +28,7 @@ func NewIAMSMSConfigWriteModel(instanceID, id string) *IAMSMSConfigWriteModel {
WriteModel: eventstore.WriteModel{
AggregateID: instanceID,
ResourceOwner: instanceID,
+ InstanceID: instanceID,
},
ID: id,
}
diff --git a/internal/command/sms_config_test.go b/internal/command/sms_config_test.go
index 99f738c326..a6df65cb75 100644
--- a/internal/command/sms_config_test.go
+++ b/internal/command/sms_config_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/notification/channels/twilio"
@@ -46,22 +45,19 @@ func TestCommandSide_AddSMSConfigTwilio(t *testing.T) {
t,
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(instance.NewSMSConfigTwilioAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "providerid",
- "sid",
- "senderName",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("token"),
- },
- ),
- ),
- },
+ instance.NewSMSConfigTwilioAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "providerid",
+ "sid",
+ "senderName",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("token"),
+ },
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "providerid"),
@@ -218,16 +214,12 @@ func TestCommandSide_ChangeSMSConfigTwilio(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newSMSConfigTwilioChangedEvent(
- context.Background(),
- "providerid",
- "sid2",
- "senderName2",
- ),
- ),
- },
+ newSMSConfigTwilioChangedEvent(
+ context.Background(),
+ "providerid",
+ "sid2",
+ "senderName2",
+ ),
),
),
},
@@ -335,15 +327,11 @@ func TestCommandSide_ActivateSMSConfigTwilio(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewSMSConfigTwilioActivatedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "providerid",
- ),
- ),
- },
+ instance.NewSMSConfigTwilioActivatedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "providerid",
+ ),
),
),
},
@@ -453,15 +441,11 @@ func TestCommandSide_DeactivateSMSConfigTwilio(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewSMSConfigDeactivatedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "providerid",
- ),
- ),
- },
+ instance.NewSMSConfigDeactivatedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "providerid",
+ ),
),
),
},
@@ -564,15 +548,11 @@ func TestCommandSide_RemoveSMSConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- instance.NewSMSConfigRemovedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "providerid",
- ),
- ),
- },
+ instance.NewSMSConfigRemovedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "providerid",
+ ),
),
),
},
diff --git a/internal/command/smtp.go b/internal/command/smtp.go
index 664cbc4bcf..2f7ea95f22 100644
--- a/internal/command/smtp.go
+++ b/internal/command/smtp.go
@@ -28,7 +28,7 @@ func (c *Commands) AddSMTPConfig(ctx context.Context, config *smtp.Config) (*dom
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
@@ -46,7 +46,7 @@ func (c *Commands) ChangeSMTPConfig(ctx context.Context, config *smtp.Config) (*
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
@@ -76,7 +76,7 @@ func (c *Commands) ChangeSMTPConfigPassword(ctx context.Context, password string
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
@@ -94,7 +94,7 @@ func (c *Commands) RemoveSMTPConfig(ctx context.Context) (*domain.ObjectDetails,
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().InstanceID,
}, nil
}
diff --git a/internal/command/smtp_test.go b/internal/command/smtp_test.go
index 1832b2d9da..39f38a37b5 100644
--- a/internal/command/smtp_test.go
+++ b/internal/command/smtp_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/notification/channels/smtp"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -143,27 +142,22 @@ func TestCommandSide_AddSMTPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSMTPConfigAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- "from@domain.ch",
- "name",
- "",
- "host:587",
- "user",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- ),
- ),
- },
+ instance.NewSMTPConfigAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ "from@domain.ch",
+ "name",
+ "",
+ "host:587",
+ "user",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -208,27 +202,22 @@ func TestCommandSide_AddSMTPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSMTPConfigAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- "from@domain.ch",
- "name",
- "replyto@domain.ch",
- "host:587",
- "user",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- ),
- ),
- },
+ instance.NewSMTPConfigAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ "from@domain.ch",
+ "name",
+ "replyto@domain.ch",
+ "host:587",
+ "user",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -318,27 +307,22 @@ func TestCommandSide_AddSMTPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSMTPConfigAddedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- true,
- "from@domain.ch",
- "name",
- "",
- "[2001:db8::1]:2525",
- "user",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- ),
- ),
- },
+ instance.NewSMTPConfigAddedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ true,
+ "from@domain.ch",
+ "name",
+ "",
+ "[2001:db8::1]:2525",
+ "user",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -576,20 +560,15 @@ func TestCommandSide_ChangeSMTPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- newSMTPConfigChangedEvent(
- context.Background(),
- false,
- "from2@domain.ch",
- "name2",
- "replyto@domain.ch",
- "host2:587",
- "user2",
- ),
- ),
- },
+ newSMTPConfigChangedEvent(
+ context.Background(),
+ false,
+ "from2@domain.ch",
+ "name2",
+ "replyto@domain.ch",
+ "host2:587",
+ "user2",
+ ),
),
),
},
@@ -690,20 +669,15 @@ func TestCommandSide_ChangeSMTPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- newSMTPConfigChangedEvent(
- context.Background(),
- false,
- "from2@domain.ch",
- "name2",
- "replyto@domain.ch",
- "[2001:db8::1]:2525",
- "user2",
- ),
- ),
- },
+ newSMTPConfigChangedEvent(
+ context.Background(),
+ false,
+ "from2@domain.ch",
+ "name2",
+ "replyto@domain.ch",
+ "[2001:db8::1]:2525",
+ "user2",
+ ),
),
),
},
@@ -802,21 +776,16 @@ func TestCommandSide_ChangeSMTPConfigPassword(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSMTPConfigPasswordChangedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("password"),
- },
- ),
- ),
- },
+ instance.NewSMTPConfigPasswordChangedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("password"),
+ },
+ ),
),
),
alg: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -906,15 +875,10 @@ func TestCommandSide_RemoveSMTPConfig(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID(
- "INSTANCE",
- instance.NewSMTPConfigRemovedEvent(
- context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- ),
- ),
- },
+ instance.NewSMTPConfigRemovedEvent(
+ context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ ),
),
),
},
diff --git a/internal/command/unique_constraints_model.go b/internal/command/unique_constraints_model.go
index 41cab4ca04..c09f6343c2 100644
--- a/internal/command/unique_constraints_model.go
+++ b/internal/command/unique_constraints_model.go
@@ -256,7 +256,7 @@ func (rm *UniqueConstraintReadModel) getUniqueConstraint(aggregateID, objectID,
return nil
}
-func (rm *UniqueConstraintReadModel) addUniqueConstraint(aggregateID, objectID string, constraint *eventstore.EventUniqueConstraint) {
+func (rm *UniqueConstraintReadModel) addUniqueConstraint(aggregateID, objectID string, constraint *eventstore.UniqueConstraint) {
migrateUniqueConstraint := &domain.UniqueConstraintMigration{
AggregateID: aggregateID,
ObjectID: objectID,
@@ -267,7 +267,7 @@ func (rm *UniqueConstraintReadModel) addUniqueConstraint(aggregateID, objectID s
rm.UniqueConstraints = append(rm.UniqueConstraints, migrateUniqueConstraint)
}
-func (rm *UniqueConstraintReadModel) changeUniqueConstraint(aggregateID, objectID string, constraint *eventstore.EventUniqueConstraint) {
+func (rm *UniqueConstraintReadModel) changeUniqueConstraint(aggregateID, objectID string, constraint *eventstore.UniqueConstraint) {
for i, uniqueConstraint := range rm.UniqueConstraints {
if uniqueConstraint.AggregateID == aggregateID && uniqueConstraint.ObjectID == objectID && uniqueConstraint.UniqueType == constraint.UniqueType {
rm.UniqueConstraints[i] = &domain.UniqueConstraintMigration{
diff --git a/internal/command/user_grant.go b/internal/command/user_grant.go
index 1e1f583969..9acc79dc76 100644
--- a/internal/command/user_grant.go
+++ b/internal/command/user_grant.go
@@ -140,7 +140,7 @@ func (c *Commands) removeRoleFromUserGrant(ctx context.Context, userGrantID stri
func (c *Commands) DeactivateUserGrant(ctx context.Context, grantID, resourceOwner string) (objectDetails *domain.ObjectDetails, err error) {
if grantID == "" || resourceOwner == "" {
- return nil, caos_errs.ThrowInvalidArgument(nil, "COMMAND-M0dsf", "Errors.UserGrant.IDMissing")
+ return nil, caos_errs.ThrowInvalidArgument(nil, "COMMAND-N2OhG", "Errors.UserGrant.IDMissing")
}
existingUserGrant, err := c.userGrantWriteModelByID(ctx, grantID, resourceOwner)
diff --git a/internal/command/user_grant_test.go b/internal/command/user_grant_test.go
index 3a5259820e..340c98dc29 100644
--- a/internal/command/user_grant_test.go
+++ b/internal/command/user_grant_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -437,16 +436,13 @@ func TestCommandSide_AddUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(usergrant.NewUserGrantAddedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- "user1",
- "project1",
- "",
- []string{"rolekey1"},
- )),
- },
- uniqueConstraintsFromEventConstraint(usergrant.NewAddUserGrantUniqueConstraint("org1", "user1", "project1", "")),
+ usergrant.NewUserGrantAddedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ "user1",
+ "project1",
+ "",
+ []string{"rolekey1"},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "usergrant1"),
@@ -518,16 +514,13 @@ func TestCommandSide_AddUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(usergrant.NewUserGrantAddedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- "user1",
- "project1",
- "projectgrant1",
- []string{"rolekey1"},
- )),
- },
- uniqueConstraintsFromEventConstraint(usergrant.NewAddUserGrantUniqueConstraint("org1", "user1", "project1", "projectgrant1")),
+ usergrant.NewUserGrantAddedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ "user1",
+ "project1",
+ "projectgrant1",
+ []string{"rolekey1"},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "usergrant1"),
@@ -1078,12 +1071,10 @@ func TestCommandSide_ChangeUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(usergrant.NewUserGrantChangedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- []string{"rolekey1", "rolekey2"},
- )),
- },
+ usergrant.NewUserGrantChangedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ []string{"rolekey1", "rolekey2"},
+ ),
),
),
},
@@ -1174,12 +1165,10 @@ func TestCommandSide_ChangeUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(usergrant.NewUserGrantChangedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- []string{"rolekey1", "rolekey2"},
- )),
- },
+ usergrant.NewUserGrantChangedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ []string{"rolekey1", "rolekey2"},
+ ),
),
),
},
@@ -1397,13 +1386,9 @@ func TestCommandSide_DeactivateUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- usergrant.NewUserGrantDeactivatedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- ),
- ),
- },
+ usergrant.NewUserGrantDeactivatedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ ),
),
),
},
@@ -1609,13 +1594,9 @@ func TestCommandSide_ReactivateUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- usergrant.NewUserGrantReactivatedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- ),
- ),
- },
+ usergrant.NewUserGrantReactivatedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ ),
),
),
},
@@ -1777,17 +1758,12 @@ func TestCommandSide_RemoveUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- usergrant.NewUserGrantRemovedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- "user1",
- "project1",
- "",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(usergrant.NewRemoveUserGrantUniqueConstraint("org1", "user1", "project1", "")),
+ usergrant.NewUserGrantRemovedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ "user1",
+ "project1",
+ "",
+ ),
),
),
},
@@ -1817,17 +1793,12 @@ func TestCommandSide_RemoveUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- usergrant.NewUserGrantRemovedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- "user1",
- "project1",
- "projectgrant1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(usergrant.NewRemoveUserGrantUniqueConstraint("org1", "user1", "project1", "projectgrant1")),
+ usergrant.NewUserGrantRemovedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ "user1",
+ "project1",
+ "projectgrant1",
+ ),
),
),
},
@@ -1994,26 +1965,18 @@ func TestCommandSide_BulkRemoveUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- usergrant.NewUserGrantRemovedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- "user1",
- "project1",
- "",
- ),
- ),
- eventFromEventPusher(
- usergrant.NewUserGrantRemovedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant2", "org1").Aggregate,
- "user2",
- "project2",
- "",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(usergrant.NewRemoveUserGrantUniqueConstraint("org1", "user1", "project1", "")),
- uniqueConstraintsFromEventConstraint(usergrant.NewRemoveUserGrantUniqueConstraint("org1", "user2", "project2", "")),
+ usergrant.NewUserGrantRemovedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ "user1",
+ "project1",
+ "",
+ ),
+ usergrant.NewUserGrantRemovedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant2", "org1").Aggregate,
+ "user2",
+ "project2",
+ "",
+ ),
),
),
},
@@ -2048,26 +2011,18 @@ func TestCommandSide_BulkRemoveUserGrant(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- usergrant.NewUserGrantRemovedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
- "user1",
- "project1",
- "projectgrant1",
- ),
- ),
- eventFromEventPusher(
- usergrant.NewUserGrantRemovedEvent(context.Background(),
- &usergrant.NewAggregate("usergrant2", "org1").Aggregate,
- "user2",
- "project2",
- "projectgrant2",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(usergrant.NewRemoveUserGrantUniqueConstraint("org1", "user1", "project1", "projectgrant1")),
- uniqueConstraintsFromEventConstraint(usergrant.NewRemoveUserGrantUniqueConstraint("org1", "user2", "project2", "projectgrant2")),
+ usergrant.NewUserGrantRemovedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant1", "org1").Aggregate,
+ "user1",
+ "project1",
+ "projectgrant1",
+ ),
+ usergrant.NewUserGrantRemovedEvent(context.Background(),
+ &usergrant.NewAggregate("usergrant2", "org1").Aggregate,
+ "user2",
+ "project2",
+ "projectgrant2",
+ ),
),
),
},
diff --git a/internal/command/user_human.go b/internal/command/user_human.go
index 645d6bf9e3..13a553dbb7 100644
--- a/internal/command/user_human.go
+++ b/internal/command/user_human.go
@@ -149,7 +149,7 @@ func (c *Commands) AddHuman(ctx context.Context, resourceOwner string, human *Ad
}
human.Details = &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}
diff --git a/internal/command/user_human_adress_test.go b/internal/command/user_human_adress_test.go
index db40534fce..d3b3176e3a 100644
--- a/internal/command/user_human_adress_test.go
+++ b/internal/command/user_human_adress_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -131,18 +130,14 @@ func TestCommandSide_ChangeHumanAddress(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddressChangedEvent(context.Background(),
- "user1", "org1",
- "country",
- "locality",
- "postalcode",
- "region",
- "street",
- ),
- ),
- },
+ newAddressChangedEvent(context.Background(),
+ "user1", "org1",
+ "country",
+ "locality",
+ "postalcode",
+ "region",
+ "street",
+ ),
),
),
},
diff --git a/internal/command/user_human_avatar_test.go b/internal/command/user_human_avatar_test.go
index 0f6f19d327..ecb7c5b964 100644
--- a/internal/command/user_human_avatar_test.go
+++ b/internal/command/user_human_avatar_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/user"
"github.com/zitadel/zitadel/internal/static"
"github.com/zitadel/zitadel/internal/static/mock"
@@ -151,14 +150,10 @@ func TestCommandSide_AddHumanAvatar(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanAvatarAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "avatar?v=test",
- ),
- ),
- },
+ user.NewHumanAvatarAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "avatar?v=test",
+ ),
),
),
storage: mock.NewStorage(t).ExpectPutObject(),
@@ -326,14 +321,10 @@ func TestCommandSide_RemoveHumanAvatar(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanAvatarRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key",
- ),
- ),
- },
+ user.NewHumanAvatarRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key",
+ ),
),
),
},
diff --git a/internal/command/user_human_email_test.go b/internal/command/user_human_email_test.go
index 3f41b2b5a3..d2861d90f3 100644
--- a/internal/command/user_human_email_test.go
+++ b/internal/command/user_human_email_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -181,19 +180,13 @@ func TestCommandSide_ChangeHumanEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "email-changed@test.ch",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "email-changed@test.ch",
+ ),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -241,13 +234,59 @@ func TestCommandSide_ChangeHumanEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
+ ),
+ ),
+ },
+ args: args{
+ ctx: context.Background(),
+ email: &domain.Email{
+ ObjectRoot: models.ObjectRoot{
+ AggregateID: "user1",
+ },
+ EmailAddress: "email@test.ch",
+ IsEmailVerified: true,
+ },
+ resourceOwner: "org1",
+ },
+ res: res{
+ want: &domain.Email{
+ ObjectRoot: models.ObjectRoot{
+ AggregateID: "user1",
+ ResourceOwner: "org1",
+ },
+ EmailAddress: "email@test.ch",
+ IsEmailVerified: true,
+ },
+ },
+ },
+ {
+ name: "email verified, ok",
+ fields: fields{
+ eventstore: eventstoreExpect(
+ t,
+ expectFilter(
+ eventFromEventPusher(
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "firstname",
+ "lastname",
+ "nickname",
+ "displayname",
+ language.German,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ true,
),
- },
+ ),
+ ),
+ expectPush(
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -295,26 +334,20 @@ func TestCommandSide_ChangeHumanEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "email-changed@test.ch",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
+ user.NewHumanEmailChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "email-changed@test.ch",
+ ),
+ user.NewHumanEmailCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
},
@@ -497,13 +530,9 @@ func TestCommandSide_VerifyHumanEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailVerificationFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailVerificationFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -552,13 +581,9 @@ func TestCommandSide_VerifyHumanEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -755,20 +780,16 @@ func TestCommandSide_CreateVerificationCodeHumanEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
+ user.NewHumanEmailCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
},
@@ -887,13 +908,9 @@ func TestCommandSide_EmailVerificationCodeSent(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailCodeSentEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailCodeSentEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
diff --git a/internal/command/user_human_init_test.go b/internal/command/user_human_init_test.go
index 69fce83668..e221b86658 100644
--- a/internal/command/user_human_init_test.go
+++ b/internal/command/user_human_init_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -133,20 +132,16 @@ func TestCommandSide_ResendInitialMail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
},
@@ -191,20 +186,16 @@ func TestCommandSide_ResendInitialMail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
},
@@ -248,24 +239,20 @@ func TestCommandSide_ResendInitialMail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "email2@test.ch")),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
+ user.NewHumanEmailChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "email2@test.ch",
+ ),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
},
@@ -442,13 +429,9 @@ func TestCommandSide_VerifyInitCode(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanInitializedCheckFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanInitializedCheckFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -497,18 +480,12 @@ func TestCommandSide_VerifyInitCode(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanInitializedCheckSucceededEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanInitializedCheckSucceededEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -574,19 +551,15 @@ func TestCommandSide_VerifyInitCode(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanInitializedCheckSucceededEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPasswordChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "$plain$x$password",
- false,
- "")),
- },
+ user.NewHumanInitializedCheckSucceededEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
+ user.NewHumanPasswordChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "$plain$x$password",
+ false,
+ "",
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -695,13 +668,9 @@ func TestCommandSide_InitCodeSent(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanInitialCodeSentEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanInitialCodeSentEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
diff --git a/internal/command/user_human_otp.go b/internal/command/user_human_otp.go
index d8aac85e5b..103899e58c 100644
--- a/internal/command/user_human_otp.go
+++ b/internal/command/user_human_otp.go
@@ -71,7 +71,7 @@ func (c *Commands) createHumanTOTP(ctx context.Context, userID, resourceOwner st
human, err := c.getHuman(ctx, userID, resourceOwner)
if err != nil {
logging.WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Debug("unable to get human for loginname")
- return nil, caos_errs.ThrowPreconditionFailed(err, "COMMAND-MM9fs", "Errors.User.NotFound")
+ return nil, caos_errs.ThrowPreconditionFailed(err, "COMMAND-SqyJz", "Errors.User.NotFound")
}
org, err := c.getOrg(ctx, human.ResourceOwner)
if err != nil {
diff --git a/internal/command/user_human_otp_test.go b/internal/command/user_human_otp_test.go
index ba3a6dc7b9..09b97dd952 100644
--- a/internal/command/user_human_otp_test.go
+++ b/internal/command/user_human_otp_test.go
@@ -18,7 +18,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -84,19 +83,17 @@ func TestCommandSide_AddHumanTOTP(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectFilter(
- eventFromEventPusher(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "firstname",
- "lastname",
- "nickname",
- "displayname",
- language.German,
- domain.GenderUnspecified,
- "email@test.ch",
- true,
- ),
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "firstname",
+ "lastname",
+ "nickname",
+ "displayname",
+ language.German,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ true,
),
),
expectFilter(),
@@ -117,27 +114,23 @@ func TestCommandSide_AddHumanTOTP(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectFilter(
- eventFromEventPusher(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "firstname",
- "lastname",
- "nickname",
- "displayname",
- language.German,
- domain.GenderUnspecified,
- "email@test.ch",
- true,
- ),
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "firstname",
+ "lastname",
+ "nickname",
+ "displayname",
+ language.German,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ true,
),
),
expectFilter(
- eventFromEventPusher(
- org.NewOrgAddedEvent(context.Background(),
- &user.NewAggregate("org1", "org1").Aggregate,
- "org",
- ),
+ org.NewOrgAddedEvent(context.Background(),
+ &user.NewAggregate("org1", "org1").Aggregate,
+ "org",
),
),
expectFilter(),
@@ -159,54 +152,47 @@ func TestCommandSide_AddHumanTOTP(t *testing.T) {
eventstore: eventstoreExpect(
t,
expectFilter(
- eventFromEventPusher(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "firstname",
- "lastname",
- "nickname",
- "displayname",
- language.German,
- domain.GenderUnspecified,
- "email@test.ch",
- true,
- ),
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "firstname",
+ "lastname",
+ "nickname",
+ "displayname",
+ language.German,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ true,
),
),
expectFilter(
- eventFromEventPusher(
- org.NewOrgAddedEvent(context.Background(),
- &user.NewAggregate("org1", "org1").Aggregate,
- "org",
- ),
+ org.NewOrgAddedEvent(context.Background(),
+ &user.NewAggregate("org1", "org1").Aggregate,
+ "org",
),
),
expectFilter(
- eventFromEventPusher(
- org.NewDomainPolicyAddedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- true,
- true,
- true,
- ),
+ org.NewDomainPolicyAddedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ true,
+ true,
+ true,
),
),
expectFilter(
- eventFromEventPusher(
- user.NewHumanOTPAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- }),
+ user.NewHumanOTPAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ ),
+ user.NewHumanOTPVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "agent1",
),
- eventFromEventPusher(
- user.NewHumanOTPVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "agent1")),
),
),
},
@@ -268,7 +254,7 @@ func TestCommands_createHumanTOTP(t *testing.T) {
resourceOwner: "org1",
userID: "user1",
},
- wantErr: caos_errs.ThrowPreconditionFailed(nil, "COMMAND-MM9fs", "Errors.User.NotFound"),
+ wantErr: caos_errs.ThrowPreconditionFailed(nil, "COMMAND-SqyJz", "Errors.User.NotFound"),
},
{
name: "org not existing, not found error",
@@ -648,12 +634,10 @@ func TestCommands_HumanCheckMFATOTPSetup(t *testing.T) {
),
),
expectPushFailed(io.ErrClosedPipe,
- []*repository.Event{eventFromEventPusher(
- user.NewHumanOTPVerifiedEvent(ctx,
- userAgg,
- "agent1",
- ),
- )},
+ user.NewHumanOTPVerifiedEvent(ctx,
+ userAgg,
+ "agent1",
+ ),
),
),
},
@@ -674,12 +658,12 @@ func TestCommands_HumanCheckMFATOTPSetup(t *testing.T) {
user.NewHumanOTPAddedEvent(ctx, userAgg, secret),
),
),
- expectPush([]*repository.Event{eventFromEventPusher(
+ expectPush(
user.NewHumanOTPVerifiedEvent(ctx,
userAgg,
"agent1",
),
- )}),
+ ),
),
},
args: args{
@@ -777,13 +761,9 @@ func TestCommandSide_RemoveHumanTOTP(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanOTPRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -957,13 +937,9 @@ func TestCommandSide_AddHumanOTPSMS(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPSMSAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1032,13 +1008,9 @@ func TestCommandSide_AddHumanOTPSMSWithCheckSucceeded(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPSMSAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1071,27 +1043,21 @@ func TestCommandSide_AddHumanOTPSMSWithCheckSucceeded(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSCheckSucceededEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPSMSAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
+ user.NewHumanOTPSMSCheckSucceededEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
},
@@ -1211,13 +1177,9 @@ func TestCommandSide_RemoveHumanOTPSMS(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSRemovedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPSMSRemovedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -1339,21 +1301,17 @@ func TestCommandSide_HumanSendOTPSMS(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSCodeAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("12345678"),
- },
- time.Hour,
- nil,
- ),
- ),
- },
+ user.NewHumanOTPSMSCodeAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("12345678"),
+ },
+ time.Hour,
+ nil,
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlgWithCode(gomock.NewController(t), "12345678"),
@@ -1383,21 +1341,17 @@ func TestCommandSide_HumanSendOTPSMS(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSCodeAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("12345678"),
- },
- time.Hour,
- nil,
- ),
- ),
- },
+ user.NewHumanOTPSMSCodeAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("12345678"),
+ },
+ time.Hour,
+ nil,
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlgWithCode(gomock.NewController(t), "12345678"),
@@ -1439,29 +1393,25 @@ func TestCommandSide_HumanSendOTPSMS(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSCodeAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("12345678"),
- },
- time.Hour,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPSMSCodeAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("12345678"),
+ },
+ time.Hour,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlgWithCode(gomock.NewController(t), "12345678"),
@@ -1565,13 +1515,9 @@ func TestCommandSide_HumanOTPSMSCodeSent(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSCodeSentEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPSMSCodeSentEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1726,22 +1672,18 @@ func TestCommandSide_HumanCheckOTPSMS(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSCheckFailedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPSMSCheckFailedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1798,22 +1740,18 @@ func TestCommandSide_HumanCheckOTPSMS(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPSMSCheckSucceededEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPSMSCheckSucceededEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -1944,13 +1882,9 @@ func TestCommandSide_AddHumanOTPEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPEmailAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -2019,13 +1953,9 @@ func TestCommandSide_AddHumanOTPEmailWithCheckSucceeded(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPEmailAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -2058,27 +1988,21 @@ func TestCommandSide_AddHumanOTPEmailWithCheckSucceeded(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailCheckSucceededEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPEmailAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
+ user.NewHumanOTPEmailCheckSucceededEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
},
@@ -2198,13 +2122,9 @@ func TestCommandSide_RemoveHumanOTPEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailRemovedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPEmailRemovedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -2326,21 +2246,17 @@ func TestCommandSide_HumanSendOTPEmail(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailCodeAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("12345678"),
- },
- time.Hour,
- nil,
- ),
- ),
- },
+ user.NewHumanOTPEmailCodeAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("12345678"),
+ },
+ time.Hour,
+ nil,
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlgWithCode(gomock.NewController(t), "12345678"),
@@ -2370,21 +2286,17 @@ func TestCommandSide_HumanSendOTPEmail(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailCodeAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("12345678"),
- },
- time.Hour,
- nil,
- ),
- ),
- },
+ user.NewHumanOTPEmailCodeAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("12345678"),
+ },
+ time.Hour,
+ nil,
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlgWithCode(gomock.NewController(t), "12345678"),
@@ -2426,29 +2338,25 @@ func TestCommandSide_HumanSendOTPEmail(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailCodeAddedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("12345678"),
- },
- time.Hour,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPEmailCodeAddedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("12345678"),
+ },
+ time.Hour,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlgWithCode(gomock.NewController(t), "12345678"),
@@ -2552,13 +2460,9 @@ func TestCommandSide_HumanOTPEmailCodeSent(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailCodeSentEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanOTPEmailCodeSentEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -2713,22 +2617,18 @@ func TestCommandSide_HumanCheckOTPEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailCheckFailedEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPEmailCheckFailedEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -2785,22 +2685,18 @@ func TestCommandSide_HumanCheckOTPEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusherWithInstanceID("inst1",
- user.NewHumanOTPEmailCheckSucceededEvent(ctx,
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "authRequestID",
- UserAgentID: "userAgentID",
- BrowserInfo: &user.BrowserInfo{
- UserAgent: "user-agent",
- AcceptLanguage: "en",
- RemoteIP: net.IP{192, 0, 2, 1},
- },
- },
- ),
- ),
- },
+ user.NewHumanOTPEmailCheckSucceededEvent(ctx,
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "authRequestID",
+ UserAgentID: "userAgentID",
+ BrowserInfo: &user.BrowserInfo{
+ UserAgent: "user-agent",
+ AcceptLanguage: "en",
+ RemoteIP: net.IP{192, 0, 2, 1},
+ },
+ },
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
diff --git a/internal/command/user_human_password.go b/internal/command/user_human_password.go
index 0a2992a46e..487907212f 100644
--- a/internal/command/user_human_password.go
+++ b/internal/command/user_human_password.go
@@ -175,7 +175,7 @@ func (c *Commands) RequestSetPassword(ctx context.Context, userID, resourceOwner
func (c *Commands) PasswordCodeSent(ctx context.Context, orgID, userID string) (err error) {
if userID == "" {
- return caos_errs.ThrowInvalidArgument(nil, "COMMAND-MM9fs", "Errors.User.UserIDMissing")
+ return caos_errs.ThrowInvalidArgument(nil, "COMMAND-meEfe", "Errors.User.UserIDMissing")
}
existingPassword, err := c.passwordWriteModel(ctx, userID, orgID)
diff --git a/internal/command/user_human_password_test.go b/internal/command/user_human_password_test.go
index 0a59b2ad33..2af86bc728 100644
--- a/internal/command/user_human_password_test.go
+++ b/internal/command/user_human_password_test.go
@@ -16,7 +16,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -158,16 +157,12 @@ func TestCommandSide_SetOneTimePassword(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "$plain$x$password",
- true,
- "",
- ),
- ),
- },
+ user.NewHumanPasswordChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "$plain$x$password",
+ true,
+ "",
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -225,16 +220,12 @@ func TestCommandSide_SetOneTimePassword(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "$plain$x$password",
- false,
- "",
- ),
- ),
- },
+ user.NewHumanPasswordChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "$plain$x$password",
+ false,
+ "",
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -482,16 +473,12 @@ func TestCommandSide_SetPasswordWithVerifyCode(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "$plain$x$password",
- false,
- "",
- ),
- ),
- },
+ user.NewHumanPasswordChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "$plain$x$password",
+ false,
+ "",
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -758,16 +745,12 @@ func TestCommandSide_ChangePassword(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "$plain$x$password1",
- false,
- "",
- ),
- ),
- },
+ user.NewHumanPasswordChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "$plain$x$password1",
+ false,
+ "",
+ ),
),
},
res: res{
@@ -929,21 +912,17 @@ func TestCommandSide_RequestSetPassword(t *testing.T) {
&user.NewAggregate("user1", "org1").Aggregate)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- domain.NotificationTypeEmail,
- ),
- ),
- },
+ user.NewHumanPasswordCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ domain.NotificationTypeEmail,
+ ),
),
),
},
@@ -1057,13 +1036,9 @@ func TestCommandSide_PasswordCodeSent(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordCodeSentEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPasswordCodeSentEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1362,17 +1337,13 @@ func TestCommandSide_CheckPassword(t *testing.T) {
"")),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordCheckFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "request1",
- UserAgentID: "agent1",
- },
- ),
- ),
- },
+ user.NewHumanPasswordCheckFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "request1",
+ UserAgentID: "agent1",
+ },
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -1449,22 +1420,16 @@ func TestCommandSide_CheckPassword(t *testing.T) {
"")),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordCheckFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "request1",
- UserAgentID: "agent1",
- },
- ),
- ),
- eventFromEventPusher(
- user.NewUserLockedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPasswordCheckFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "request1",
+ UserAgentID: "agent1",
+ },
+ ),
+ user.NewUserLockedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -1543,17 +1508,13 @@ func TestCommandSide_CheckPassword(t *testing.T) {
"")),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordCheckSucceededEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "request1",
- UserAgentID: "agent1",
- },
- ),
- ),
- },
+ user.NewHumanPasswordCheckSucceededEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "request1",
+ UserAgentID: "agent1",
+ },
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -1627,23 +1588,18 @@ func TestCommandSide_CheckPassword(t *testing.T) {
"")),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordCheckSucceededEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "request1",
- UserAgentID: "agent1",
- },
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPasswordHashUpdatedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "$plain$x$password",
- ),
- ),
- },
+ user.NewHumanPasswordCheckSucceededEvent(
+ context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "request1",
+ UserAgentID: "agent1",
+ },
+ ),
+ user.NewHumanPasswordHashUpdatedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "$plain$x$password",
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
@@ -1727,23 +1683,17 @@ func TestCommandSide_CheckPassword(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordCheckSucceededEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "request1",
- UserAgentID: "agent1",
- },
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPasswordHashUpdatedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "$plain$x$password",
- ),
- ),
- },
+ user.NewHumanPasswordCheckSucceededEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "request1",
+ UserAgentID: "agent1",
+ },
+ ),
+ user.NewHumanPasswordHashUpdatedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "$plain$x$password",
+ ),
),
),
userPasswordHasher: mockPasswordHasher("x"),
diff --git a/internal/command/user_human_phone_test.go b/internal/command/user_human_phone_test.go
index 8a2b426cb0..d018573eec 100644
--- a/internal/command/user_human_phone_test.go
+++ b/internal/command/user_human_phone_test.go
@@ -13,7 +13,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -152,19 +151,13 @@ func TestCommandSide_ChangeHumanPhone(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "+41719876543",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPhoneChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "+41719876543",
+ ),
+ user.NewHumanPhoneVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -218,13 +211,65 @@ func TestCommandSide_ChangeHumanPhone(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
+ user.NewHumanPhoneVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
+ ),
+ ),
+ },
+ args: args{
+ ctx: context.Background(),
+ email: &domain.Phone{
+ ObjectRoot: models.ObjectRoot{
+ AggregateID: "user1",
+ },
+ PhoneNumber: "+41711234567",
+ IsPhoneVerified: true,
+ },
+ resourceOwner: "org1",
+ },
+ res: res{
+ want: &domain.Phone{
+ ObjectRoot: models.ObjectRoot{
+ AggregateID: "user1",
+ ResourceOwner: "org1",
+ },
+ PhoneNumber: "+41711234567",
+ IsPhoneVerified: true,
+ },
+ },
+ },
+ {
+ name: "phone changed to verified, ok",
+ fields: fields{
+ eventstore: eventstoreExpect(
+ t,
+ expectFilter(
+ eventFromEventPusher(
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "firstname",
+ "lastname",
+ "nickname",
+ "displayname",
+ language.German,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ true,
),
- },
+ ),
+ eventFromEventPusher(
+ user.NewHumanPhoneChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "+41711234567",
+ ),
+ ),
+ ),
+ expectPush(
+ user.NewHumanPhoneVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -272,26 +317,20 @@ func TestCommandSide_ChangeHumanPhone(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "+41711234567",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
+ user.NewHumanPhoneChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "+41711234567",
+ ),
+ user.NewHumanPhoneCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
},
@@ -480,13 +519,9 @@ func TestCommandSide_VerifyHumanPhone(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneVerificationFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPhoneVerificationFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -541,13 +576,9 @@ func TestCommandSide_VerifyHumanPhone(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPhoneVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -720,20 +751,16 @@ func TestCommandSide_CreateVerificationCodeHumanPhone(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("12345678"),
- },
- time.Hour*1,
- ),
- ),
- },
+ user.NewHumanPhoneCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("12345678"),
+ },
+ time.Hour*1,
+ ),
),
),
userEncryption: crypto.CreateMockEncryptionAlgWithCode(gomock.NewController(t), "12345678"),
@@ -848,13 +875,9 @@ func TestCommandSide_PhoneVerificationCodeSent(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneCodeSentEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPhoneCodeSentEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -993,13 +1016,9 @@ func TestCommandSide_RemoveHumanPhone(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPhoneRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
diff --git a/internal/command/user_human_profile_test.go b/internal/command/user_human_profile_test.go
index 47fd9d1220..aea3ef562e 100644
--- a/internal/command/user_human_profile_test.go
+++ b/internal/command/user_human_profile_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -125,19 +124,15 @@ func TestCommandSide_ChangeHumanProfile(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newProfileChangedEvent(context.Background(),
- "user1", "org1",
- "firstname2",
- "lastname2",
- "nickname2",
- "displayname2",
- language.English,
- domain.GenderMale,
- ),
- ),
- },
+ newProfileChangedEvent(context.Background(),
+ "user1", "org1",
+ "firstname2",
+ "lastname2",
+ "nickname2",
+ "displayname2",
+ language.English,
+ domain.GenderMale,
+ ),
),
),
},
diff --git a/internal/command/user_human_refresh_token_test.go b/internal/command/user_human_refresh_token_test.go
index 760604c66d..6ad7f68654 100644
--- a/internal/command/user_human_refresh_token_test.go
+++ b/internal/command/user_human_refresh_token_test.go
@@ -14,7 +14,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -376,13 +375,11 @@ func TestCommands_RevokeRefreshToken(t *testing.T) {
)),
),
expectPushFailed(caos_errs.ThrowInternal(nil, "ERROR", "internal"),
- []*repository.Event{
- eventFromEventPusher(user.NewHumanRefreshTokenRemovedEvent(
- context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID",
- )),
- },
+ user.NewHumanRefreshTokenRemovedEvent(
+ context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID",
+ ),
),
),
},
@@ -417,13 +414,11 @@ func TestCommands_RevokeRefreshToken(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(user.NewHumanRefreshTokenRemovedEvent(
- context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID",
- )),
- },
+ user.NewHumanRefreshTokenRemovedEvent(
+ context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID",
+ ),
),
),
},
@@ -563,18 +558,16 @@ func TestCommands_RevokeRefreshTokens(t *testing.T) {
)),
),
expectPushFailed(caos_errs.ThrowInternal(nil, "ERROR", "internal"),
- []*repository.Event{
- eventFromEventPusher(user.NewHumanRefreshTokenRemovedEvent(
- context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID",
- )),
- eventFromEventPusher(user.NewHumanRefreshTokenRemovedEvent(
- context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID2",
- )),
- },
+ user.NewHumanRefreshTokenRemovedEvent(
+ context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID",
+ ),
+ user.NewHumanRefreshTokenRemovedEvent(
+ context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID2",
+ ),
),
),
},
@@ -625,18 +618,16 @@ func TestCommands_RevokeRefreshTokens(t *testing.T) {
)),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(user.NewHumanRefreshTokenRemovedEvent(
- context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID",
- )),
- eventFromEventPusher(user.NewHumanRefreshTokenRemovedEvent(
- context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID2",
- )),
- },
+ user.NewHumanRefreshTokenRemovedEvent(
+ context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID",
+ ),
+ user.NewHumanRefreshTokenRemovedEvent(
+ context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID2",
+ ),
),
),
},
diff --git a/internal/command/user_human_test.go b/internal/command/user_human_test.go
index 4b02e6e447..b7ca941ae0 100644
--- a/internal/command/user_human_test.go
+++ b/internal/command/user_human_test.go
@@ -16,7 +16,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -105,7 +104,7 @@ func TestCommandSide_AddHuman(t *testing.T) {
eventstore: expectEventstore(
expectFilter(
eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", true, ""),
+ newAddHumanEvent("$plain$x$password", true, true, ""),
),
),
),
@@ -219,35 +218,28 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanAddedEvent(context.Background(),
- &userAgg.Aggregate,
- "username",
- "firstname",
- "lastname",
- "",
- "firstname lastname",
- language.English,
- domain.GenderUnspecified,
- "email@test.ch",
- true,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &userAgg.Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("userinit"),
- },
- time.Hour*1,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ user.NewHumanAddedEvent(context.Background(),
+ &userAgg.Aggregate,
+ "username",
+ "firstname",
+ "lastname",
+ "",
+ "firstname lastname",
+ language.English,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ true,
+ ),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &userAgg.Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("userinit"),
+ },
+ time.Hour*1,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -306,24 +298,17 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("userinit"),
- },
- 1*time.Hour,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, ""),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("userinit"),
+ },
+ 1*time.Hour,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -382,26 +367,19 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailCodeAddedEventV2(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("emailCode"),
- },
- 1*time.Hour,
- "https://example.com/email/verify?userID={{.UserID}}&code={{.Code}}",
- false,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, ""),
+ user.NewHumanEmailCodeAddedEventV2(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("emailCode"),
+ },
+ 1*time.Hour,
+ "https://example.com/email/verify?userID={{.UserID}}&code={{.Code}}",
+ false,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -461,26 +439,19 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailCodeAddedEventV2(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("emailCode"),
- },
- 1*time.Hour,
- "",
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, ""),
+ user.NewHumanEmailCodeAddedEventV2(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("emailCode"),
+ },
+ 1*time.Hour,
+ "",
+ true,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -541,16 +512,10 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", true, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &userAgg.Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", true, true, ""),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &userAgg.Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -610,16 +575,10 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", true, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &userAgg.Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", true, true, ""),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &userAgg.Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -679,16 +638,10 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", true, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &userAgg.Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", false)),
+ newAddHumanEvent("$plain$x$password", true, false, ""),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &userAgg.Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -808,31 +761,25 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- func() eventstore.Command {
- event := user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username@test.ch",
- "firstname",
- "lastname",
- "",
- "firstname lastname",
- language.English,
- domain.GenderUnspecified,
- "email@test.ch",
- true,
- )
- event.AddPasswordData("$plain$x$password", true)
- return event
- }(),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &userAgg.Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username@test.ch", "org1", false)),
+ func() eventstore.Command {
+ event := user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username@test.ch",
+ "firstname",
+ "lastname",
+ "",
+ "firstname lastname",
+ language.English,
+ domain.GenderUnspecified,
+ "email@test.ch",
+ false,
+ )
+ event.AddPasswordData("$plain$x$password", true)
+ return event
+ }(),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &userAgg.Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -893,28 +840,21 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, "+41711234567"),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(
- context.Background(),
- &userAgg.Aggregate,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEvent(context.Background(),
- &userAgg.Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("phonecode"),
- },
- time.Hour*1)),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, "+41711234567"),
+ user.NewHumanEmailVerifiedEvent(
+ context.Background(),
+ &userAgg.Aggregate,
+ ),
+ user.NewHumanPhoneCodeAddedEvent(context.Background(),
+ &userAgg.Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("phonecode"),
+ },
+ time.Hour*1,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -965,31 +905,22 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("", false, "+41711234567"),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(
- context.Background(),
- &userAgg.Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("userinit"),
- },
- 1*time.Hour,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneVerifiedEvent(
- context.Background(),
- &userAgg.Aggregate,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("", false, true, "+41711234567"),
+ user.NewHumanInitialCodeAddedEvent(
+ context.Background(),
+ &userAgg.Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("userinit"),
+ },
+ 1*time.Hour,
+ ),
+ user.NewHumanPhoneVerifiedEvent(
+ context.Background(),
+ &userAgg.Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -1049,30 +980,21 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, "+41711234567"),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEventV2(
- context.Background(),
- &userAgg.Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("phoneCode"),
- },
- 1*time.Hour,
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, "+41711234567"),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate),
+ user.NewHumanPhoneCodeAddedEventV2(
+ context.Background(),
+ &userAgg.Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("phoneCode"),
+ },
+ 1*time.Hour,
+ true,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -1124,33 +1046,24 @@ func TestCommandSide_AddHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(
- context.Background(),
- &userAgg.Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("userinit"),
- },
- 1*time.Hour,
- ),
- ),
- eventFromEventPusher(
- user.NewMetadataSetEvent(
- context.Background(),
- &userAgg.Aggregate,
- "testKey",
- []byte("testValue"),
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("", false, true, ""),
+ user.NewHumanInitialCodeAddedEvent(
+ context.Background(),
+ &userAgg.Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("userinit"),
+ },
+ 1*time.Hour,
+ ),
+ user.NewMetadataSetEvent(
+ context.Background(),
+ &userAgg.Aggregate,
+ "testKey",
+ []byte("testValue"),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -1200,9 +1113,9 @@ func TestCommandSide_AddHuman(t *testing.T) {
if !assert.NoError(t, err) {
t.FailNow()
}
- }
- if tt.res.err != nil && !tt.res.err(err) {
+ } else if !tt.res.err(err) {
t.Errorf("got wrong err: %v ", err)
+ return
}
if tt.res.err == nil {
assert.Equal(t, tt.res.want, tt.args.human.Details)
@@ -1399,24 +1312,17 @@ func TestCommandSide_ImportHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", true, ""),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", true, true, ""),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -1490,16 +1396,10 @@ func TestCommandSide_ImportHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, ""),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -1576,29 +1476,20 @@ func TestCommandSide_ImportHuman(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "code1",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("", false, true, ""),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate),
+ user.NewHumanPasswordlessInitCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "code1",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1", "code1"),
@@ -1683,29 +1574,20 @@ func TestCommandSide_ImportHuman(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "code1",
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, ""),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate),
+ user.NewHumanPasswordlessInitCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "code1",
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1", "code1"),
@@ -1793,34 +1675,26 @@ func TestCommandSide_ImportHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, "+41711234567"),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1)),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, "+41711234567"),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
+ user.NewHumanPhoneCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -1900,28 +1774,19 @@ func TestCommandSide_ImportHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("$plain$x$password", false, "+41711234567"),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newAddHumanEvent("$plain$x$password", false, true, "+41711234567"),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
+ user.NewHumanPhoneVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -2059,25 +1924,15 @@ func TestCommandSide_ImportHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newAddHumanEvent("", false, ""),
- ),
- eventFromEventPusher(
- user.NewUserIDPLinkAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "idpID",
- "name",
- "externalID",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewAddUserIDPLinkUniqueConstraint("idpID", "externalID")),
+ newAddHumanEvent("", false, true, ""),
+ user.NewUserIDPLinkAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "idpID",
+ "name",
+ "externalID",
+ ),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -2770,24 +2625,17 @@ func TestCommandSide_RegisterHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRegisterHumanEvent("email@test.ch", "$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("email@test.ch", "org1", false)),
+ newRegisterHumanEvent("email@test.ch", "$plain$x$password", false, false, ""),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -2882,24 +2730,17 @@ func TestCommandSide_RegisterHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRegisterHumanEvent("username", "$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", false)),
+ newRegisterHumanEvent("username", "$plain$x$password", false, false, ""),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -2995,24 +2836,17 @@ func TestCommandSide_RegisterHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRegisterHumanEvent("username", "$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newRegisterHumanEvent("username", "$plain$x$password", false, true, ""),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -3108,16 +2942,9 @@ func TestCommandSide_RegisterHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRegisterHumanEvent("username", "$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newRegisterHumanEvent("username", "$plain$x$password", false, true, ""),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -3215,34 +3042,27 @@ func TestCommandSide_RegisterHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRegisterHumanEvent("username", "$plain$x$password", false, "+41711234567"),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1)),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newRegisterHumanEvent("username", "$plain$x$password", false, true, "+41711234567"),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
+ user.NewHumanPhoneCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -3344,28 +3164,20 @@ func TestCommandSide_RegisterHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRegisterHumanEvent("username", "$plain$x$password", false, "+41711234567"),
- ),
- eventFromEventPusher(
- user.NewHumanInitialCodeAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ newRegisterHumanEvent("username", "$plain$x$password", false, true, "+41711234567"),
+ user.NewHumanInitialCodeAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ ),
+ user.NewHumanPhoneVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -3525,25 +3337,16 @@ func TestCommandSide_RegisterHuman(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newRegisterHumanEvent("username", "$plain$x$password", false, ""),
- ),
- eventFromEventPusher(
- user.NewUserIDPLinkAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "idpID",
- "displayName",
- "externalID",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewAddUserIDPLinkUniqueConstraint("idpID", "externalID")),
+ newRegisterHumanEvent("username", "$plain$x$password", false, true, ""),
+ user.NewUserIDPLinkAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "idpID",
+ "displayName",
+ "externalID",
+ ),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -3692,13 +3495,9 @@ func TestCommandSide_HumanMFASkip(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanMFAInitSkippedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanMFAInitSkippedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -3820,14 +3619,10 @@ func TestCommandSide_HumanSignOut(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanSignedOutEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "agent1",
- ),
- ),
- },
+ user.NewHumanSignedOutEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "agent1",
+ ),
),
),
},
@@ -3880,20 +3675,14 @@ func TestCommandSide_HumanSignOut(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanSignedOutEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "agent1",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanSignedOutEvent(context.Background(),
- &user.NewAggregate("user2", "org1").Aggregate,
- "agent1",
- ),
- ),
- },
+ user.NewHumanSignedOutEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "agent1",
+ ),
+ user.NewHumanSignedOutEvent(context.Background(),
+ &user.NewAggregate("user2", "org1").Aggregate,
+ "agent1",
+ ),
),
),
},
@@ -3925,7 +3714,7 @@ func TestCommandSide_HumanSignOut(t *testing.T) {
}
}
-func newAddHumanEvent(password string, changeRequired bool, phone string) *user.HumanAddedEvent {
+func newAddHumanEvent(password string, changeRequired, userLoginMustBeDomain bool, phone string) *user.HumanAddedEvent {
event := user.NewHumanAddedEvent(context.Background(),
&user.NewAggregate("user1", "org1").Aggregate,
"username",
@@ -3936,7 +3725,7 @@ func newAddHumanEvent(password string, changeRequired bool, phone string) *user.
language.English,
domain.GenderUnspecified,
"email@test.ch",
- true,
+ userLoginMustBeDomain,
)
if password != "" {
event.AddPasswordData(password, changeRequired)
@@ -3947,7 +3736,7 @@ func newAddHumanEvent(password string, changeRequired bool, phone string) *user.
return event
}
-func newRegisterHumanEvent(username, password string, changeRequired bool, phone string) *user.HumanRegisteredEvent {
+func newRegisterHumanEvent(username, password string, changeRequired, userLoginMustBeUnique bool, phone string) *user.HumanRegisteredEvent {
event := user.NewHumanRegisteredEvent(context.Background(),
&user.NewAggregate("user1", "org1").Aggregate,
username,
@@ -3958,7 +3747,7 @@ func newRegisterHumanEvent(username, password string, changeRequired bool, phone
language.Und,
domain.GenderUnspecified,
"email@test.ch",
- true,
+ userLoginMustBeUnique,
)
if password != "" {
event.AddPasswordData(password, changeRequired)
diff --git a/internal/command/user_idp_link.go b/internal/command/user_idp_link.go
index bf7b6c72c7..a66140ec79 100644
--- a/internal/command/user_idp_link.go
+++ b/internal/command/user_idp_link.go
@@ -34,7 +34,7 @@ func (c *Commands) AddUserIDPLink(ctx context.Context, userID, resourceOwner str
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
diff --git a/internal/command/user_idp_link_test.go b/internal/command/user_idp_link_test.go
index 68d7611c57..f86ab12db9 100644
--- a/internal/command/user_idp_link_test.go
+++ b/internal/command/user_idp_link_test.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/idp"
"github.com/zitadel/zitadel/internal/repository/instance"
@@ -381,17 +380,12 @@ func TestCommandSide_BulkAddUserIDPLinks(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserIDPLinkAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "config1",
- "name",
- "externaluser1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUserIDPLinkUniqueConstraint("config1", "externaluser1")),
+ user.NewUserIDPLinkAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "config1",
+ "name",
+ "externaluser1",
+ ),
),
),
},
@@ -485,17 +479,12 @@ func TestCommandSide_BulkAddUserIDPLinks(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserIDPLinkAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "config1",
- "name",
- "externaluser1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUserIDPLinkUniqueConstraint("config1", "externaluser1")),
+ user.NewUserIDPLinkAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "config1",
+ "name",
+ "externaluser1",
+ ),
),
),
},
@@ -662,16 +651,11 @@ func TestCommandSide_RemoveUserIDPLink(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserIDPLinkRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "config1",
- "externaluser1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUserIDPLinkUniqueConstraint("config1", "externaluser1")),
+ user.NewUserIDPLinkRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "config1",
+ "externaluser1",
+ ),
),
),
},
@@ -802,18 +786,14 @@ func TestCommandSide_ExternalLoginCheck(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserIDPCheckSucceededEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &user.AuthRequestInfo{
- ID: "request1",
- UserAgentID: "useragent1",
- SelectedIDPConfigID: "config1",
- },
- ),
- ),
- },
+ user.NewUserIDPCheckSucceededEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &user.AuthRequestInfo{
+ ID: "request1",
+ UserAgentID: "useragent1",
+ SelectedIDPConfigID: "config1",
+ },
+ ),
),
),
},
@@ -927,16 +907,12 @@ func TestCommandSide_MigrateUserIDP(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserIDPExternalIDMigratedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "idpConfig1",
- "previousID",
- "newID",
- ),
- ),
- },
+ user.NewUserIDPExternalIDMigratedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "idpConfig1",
+ "previousID",
+ "newID",
+ ),
),
),
},
diff --git a/internal/command/user_machine.go b/internal/command/user_machine.go
index 4a6ebe89c1..700964f6b7 100644
--- a/internal/command/user_machine.go
+++ b/internal/command/user_machine.go
@@ -85,7 +85,7 @@ func (c *Commands) AddMachine(ctx context.Context, machine *Machine) (*domain.Ob
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
@@ -104,7 +104,7 @@ func (c *Commands) ChangeMachine(ctx context.Context, machine *Machine) (*domain
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
diff --git a/internal/command/user_machine_key.go b/internal/command/user_machine_key.go
index abf8cd01e5..a3535770d7 100644
--- a/internal/command/user_machine_key.go
+++ b/internal/command/user_machine_key.go
@@ -109,7 +109,7 @@ func (c *Commands) AddUserMachineKey(ctx context.Context, machineKey *MachineKey
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
@@ -161,7 +161,7 @@ func (c *Commands) RemoveUserMachineKey(ctx context.Context, machineKey *Machine
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
diff --git a/internal/command/user_machine_key_test.go b/internal/command/user_machine_key_test.go
index b2611ad33d..94398fa5c0 100644
--- a/internal/command/user_machine_key_test.go
+++ b/internal/command/user_machine_key_test.go
@@ -12,7 +12,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -141,17 +140,13 @@ func TestCommands_AddMachineKey(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMachineKeyAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key1",
- domain.AuthNKeyTypeJSON,
- time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- []byte("public"),
- ),
- ),
- },
+ user.NewMachineKeyAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key1",
+ domain.AuthNKeyTypeJSON,
+ time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
+ []byte("public"),
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "key1"),
@@ -194,17 +189,13 @@ func TestCommands_AddMachineKey(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMachineKeyAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key1",
- domain.AuthNKeyTypeJSON,
- time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- []byte("public"),
- ),
- ),
- },
+ user.NewMachineKeyAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key1",
+ domain.AuthNKeyTypeJSON,
+ time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
+ []byte("public"),
+ ),
),
),
keyAlgorithm: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
diff --git a/internal/command/user_machine_secret.go b/internal/command/user_machine_secret.go
index 8f28b5e5db..ebec62d85f 100644
--- a/internal/command/user_machine_secret.go
+++ b/internal/command/user_machine_secret.go
@@ -31,7 +31,7 @@ func (c *Commands) GenerateMachineSecret(ctx context.Context, userID string, res
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
@@ -80,7 +80,7 @@ func (c *Commands) RemoveMachineSecret(ctx context.Context, userID string, resou
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
@@ -131,7 +131,7 @@ func (c *Commands) VerifyMachineSecret(ctx context.Context, userID string, resou
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
diff --git a/internal/command/user_machine_secret_test.go b/internal/command/user_machine_secret_test.go
index 42df770d94..77343c8fb0 100644
--- a/internal/command/user_machine_secret_test.go
+++ b/internal/command/user_machine_secret_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -109,19 +108,15 @@ func TestCommandSide_GenerateMachineSecret(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMachineSecretSetEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- ),
- ),
- },
+ user.NewMachineSecretSetEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ ),
),
),
},
@@ -287,13 +282,9 @@ func TestCommandSide_RemoveMachineSecret(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMachineSecretRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewMachineSecretRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -454,13 +445,9 @@ func TestCommandSide_VerifyMachineSecret(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMachineSecretCheckSucceededEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewMachineSecretCheckSucceededEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -505,13 +492,9 @@ func TestCommandSide_VerifyMachineSecret(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMachineSecretCheckFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewMachineSecretCheckFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
diff --git a/internal/command/user_machine_test.go b/internal/command/user_machine_test.go
index 2960ab95b2..9c91c17cc5 100644
--- a/internal/command/user_machine_test.go
+++ b/internal/command/user_machine_test.go
@@ -9,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
@@ -120,19 +119,14 @@ func TestCommandSide_AddMachine(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMachineAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "name",
- "description",
- true,
- domain.OIDCTokenTypeBearer,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username", "org1", true)),
+ user.NewMachineAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "name",
+ "description",
+ true,
+ domain.OIDCTokenTypeBearer,
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "user1"),
@@ -309,11 +303,7 @@ func TestCommandSide_ChangeMachine(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- newMachineChangedEvent(context.Background(), "user1", "org1", "name1", "description1"),
- ),
- },
+ newMachineChangedEvent(context.Background(), "user1", "org1", "name1", "description1"),
),
),
},
diff --git a/internal/command/user_metadata_test.go b/internal/command/user_metadata_test.go
index 2d480dab92..f2ef90cf6b 100644
--- a/internal/command/user_metadata_test.go
+++ b/internal/command/user_metadata_test.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -115,15 +114,11 @@ func TestCommandSide_SetUserMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMetadataSetEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key",
- []byte("value"),
- ),
- ),
- },
+ user.NewMetadataSetEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key",
+ []byte("value"),
+ ),
),
),
},
@@ -285,22 +280,16 @@ func TestCommandSide_BulkSetUserMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMetadataSetEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key",
- []byte("value"),
- ),
- ),
- eventFromEventPusher(
- user.NewMetadataSetEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key1",
- []byte("value1"),
- ),
- ),
- },
+ user.NewMetadataSetEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key",
+ []byte("value"),
+ ),
+ user.NewMetadataSetEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key1",
+ []byte("value1"),
+ ),
),
),
},
@@ -461,14 +450,10 @@ func TestCommandSide_UserRemoveMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMetadataRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key",
- ),
- ),
- },
+ user.NewMetadataRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key",
+ ),
),
),
},
@@ -689,20 +674,14 @@ func TestCommandSide_BulkRemoveUserMetadata(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewMetadataRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key",
- ),
- ),
- eventFromEventPusher(
- user.NewMetadataRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "key1",
- ),
- ),
- },
+ user.NewMetadataRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key",
+ ),
+ user.NewMetadataRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "key1",
+ ),
),
),
},
diff --git a/internal/command/user_personal_access_token.go b/internal/command/user_personal_access_token.go
index 4f252c08c8..fb8d01c828 100644
--- a/internal/command/user_personal_access_token.go
+++ b/internal/command/user_personal_access_token.go
@@ -95,7 +95,7 @@ func (c *Commands) AddPersonalAccessToken(ctx context.Context, pat *PersonalAcce
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
@@ -144,7 +144,7 @@ func (c *Commands) RemovePersonalAccessToken(ctx context.Context, pat *PersonalA
}
return &domain.ObjectDetails{
Sequence: events[len(events)-1].Sequence(),
- EventDate: events[len(events)-1].CreationDate(),
+ EventDate: events[len(events)-1].CreatedAt(),
ResourceOwner: events[len(events)-1].Aggregate().ResourceOwner,
}, nil
}
diff --git a/internal/command/user_personal_access_token_test.go b/internal/command/user_personal_access_token_test.go
index 93c2ef5767..bfaf5a0b66 100644
--- a/internal/command/user_personal_access_token_test.go
+++ b/internal/command/user_personal_access_token_test.go
@@ -9,20 +9,14 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-
- id_mock "github.com/zitadel/zitadel/internal/id/mock"
-
- "github.com/zitadel/zitadel/internal/repository/user"
-
- caos_errs "github.com/zitadel/zitadel/internal/errors"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
+ caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/id"
+ id_mock "github.com/zitadel/zitadel/internal/id/mock"
+ "github.com/zitadel/zitadel/internal/repository/user"
)
func TestCommands_AddPersonalAccessToken(t *testing.T) {
@@ -182,16 +176,12 @@ func TestCommands_AddPersonalAccessToken(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewPersonalAccessTokenAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "token1",
- time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- []string{"openid"},
- ),
- ),
- },
+ user.NewPersonalAccessTokenAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "token1",
+ time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
+ []string{"openid"},
+ ),
),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "token1"),
@@ -234,16 +224,12 @@ func TestCommands_AddPersonalAccessToken(t *testing.T) {
),
expectFilter(),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewPersonalAccessTokenAddedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "token1",
- time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- []string{"openid"},
- ),
- ),
- },
+ user.NewPersonalAccessTokenAddedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "token1",
+ time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
+ []string{"openid"},
+ ),
),
),
keyAlgorithm: crypto.CreateMockEncryptionAlg(gomock.NewController(t)),
@@ -345,14 +331,10 @@ func TestCommands_RemovePersonalAccessToken(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewPersonalAccessTokenRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "token1",
- ),
- ),
- },
+ user.NewPersonalAccessTokenRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "token1",
+ ),
),
),
},
diff --git a/internal/command/user_test.go b/internal/command/user_test.go
index a6f16ee32e..7073071cf4 100644
--- a/internal/command/user_test.go
+++ b/internal/command/user_test.go
@@ -12,10 +12,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
"github.com/zitadel/zitadel/internal/repository/instance"
- "github.com/zitadel/zitadel/internal/repository/member"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -299,18 +297,12 @@ func TestCommandSide_UsernameChange(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "test@test.ch",
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("test@test.ch", "org1", true)),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "test@test.ch",
+ true,
+ ),
),
),
},
@@ -366,18 +358,12 @@ func TestCommandSide_UsernameChange(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "test@test.ch",
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", false)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("test@test.ch", "org1", false)),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "test@test.ch",
+ false,
+ ),
),
),
},
@@ -425,18 +411,12 @@ func TestCommandSide_UsernameChange(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "username1",
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username1", "org1", true)),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "username1",
+ true,
+ ),
),
),
},
@@ -484,18 +464,12 @@ func TestCommandSide_UsernameChange(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUsernameChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- "username1",
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewAddUsernameUniqueConstraint("username1", "org1", true)),
+ user.NewUsernameChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ "username1",
+ true,
+ ),
),
),
},
@@ -644,13 +618,9 @@ func TestCommandSide_DeactivateUser(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserDeactivatedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewUserDeactivatedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -797,13 +767,9 @@ func TestCommandSide_ReactivateUser(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserReactivatedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewUserReactivatedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -951,13 +917,9 @@ func TestCommandSide_LockUser(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserLockedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewUserLockedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1104,13 +1066,9 @@ func TestCommandSide_UnlockUser(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserUnlockedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewUserUnlockedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1269,17 +1227,12 @@ func TestCommandSide_RemoveUser(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- nil,
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", true)),
+ user.NewUserRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ nil,
+ true,
+ ),
),
),
},
@@ -1335,18 +1288,17 @@ func TestCommandSide_RemoveUser(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- nil,
- true,
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", true)),
- uniqueConstraintsFromEventConstraint(user.NewRemoveUserIDPLinkUniqueConstraint("idpConfigID", "externalUserID")),
+ user.NewUserRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ []*domain.UserIDPLink{
+ {
+ IDPConfigID: "idpConfigID",
+ ExternalUserID: "externalUserID",
+ },
+ },
+ true,
+ ),
),
),
},
@@ -1394,46 +1346,29 @@ func TestCommandSide_RemoveUser(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewUserRemovedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "username",
- nil,
- true,
- ),
- ),
- eventFromEventPusher(
- instance.NewMemberCascadeRemovedEvent(context.Background(),
- &instance.NewAggregate("INSTANCE").Aggregate,
- "user1",
- ),
- ),
- eventFromEventPusher(
- org.NewMemberCascadeRemovedEvent(context.Background(),
- &org.NewAggregate("org1").Aggregate,
- "user1",
- ),
- ),
- eventFromEventPusher(
- project.NewProjectMemberCascadeRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- ),
- ),
- eventFromEventPusher(
- project.NewProjectGrantMemberCascadeRemovedEvent(context.Background(),
- &project.NewAggregate("project1", "org1").Aggregate,
- "user1",
- "grant1",
- ),
- ),
- },
- uniqueConstraintsFromEventConstraint(user.NewRemoveUsernameUniqueConstraint("username", "org1", true)),
- uniqueConstraintsFromEventConstraint(member.NewRemoveMemberUniqueConstraint("INSTANCE", "user1")),
- uniqueConstraintsFromEventConstraint(member.NewRemoveMemberUniqueConstraint("org1", "user1")),
- uniqueConstraintsFromEventConstraint(member.NewRemoveMemberUniqueConstraint("project1", "user1")),
- uniqueConstraintsFromEventConstraint(project.NewRemoveProjectGrantMemberUniqueConstraint("project1", "user1", "grant1")),
+ user.NewUserRemovedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "username",
+ nil,
+ true,
+ ),
+ instance.NewMemberCascadeRemovedEvent(context.Background(),
+ &instance.NewAggregate("INSTANCE").Aggregate,
+ "user1",
+ ),
+ org.NewMemberCascadeRemovedEvent(context.Background(),
+ &org.NewAggregate("org1").Aggregate,
+ "user1",
+ ),
+ project.NewProjectMemberCascadeRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ ),
+ project.NewProjectGrantMemberCascadeRemovedEvent(context.Background(),
+ &project.NewAggregate("project1", "org1").Aggregate,
+ "user1",
+ "grant1",
+ ),
),
),
},
@@ -1489,13 +1424,11 @@ func TestCommandSide_RemoveUser(t *testing.T) {
got, err := r.RemoveUser(tt.args.ctx, tt.args.userID, tt.args.orgID, tt.args.cascadeUserMemberships, tt.args.cascadeUserGrants...)
if tt.res.err == nil {
assert.NoError(t, err)
- }
- if tt.res.err != nil && !tt.res.err(err) {
+ } else if !tt.res.err(err) {
t.Errorf("got wrong err: %v ", err)
+ return
}
- if tt.res.err == nil {
- assert.Equal(t, tt.res.want, got)
- }
+ assert.Equal(t, tt.res.want, got)
})
}
}
@@ -1669,11 +1602,9 @@ func TestCommands_RevokeAccessToken(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- user.NewUserTokenRemovedEvent(context.Background(),
- &user.NewAggregate("userID", "orgID").Aggregate,
- "tokenID",
- ),
+ user.NewUserTokenRemovedEvent(context.Background(),
+ &user.NewAggregate("userID", "orgID").Aggregate,
+ "tokenID",
),
),
),
@@ -1783,13 +1714,9 @@ func TestCommandSide_UserDomainClaimedSent(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewDomainClaimedSentEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewDomainClaimedSentEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
diff --git a/internal/command/user_v2_email_test.go b/internal/command/user_v2_email_test.go
index dfcbe91070..ec8b7f7554 100644
--- a/internal/command/user_v2_email_test.go
+++ b/internal/command/user_v2_email_test.go
@@ -15,7 +15,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -521,19 +520,13 @@ func TestCommands_ChangeUserEmailVerified(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "email-changed@test.ch",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "email-changed@test.ch",
+ ),
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -561,7 +554,7 @@ func TestCommands_ChangeUserEmailVerified(t *testing.T) {
}
got, err := c.ChangeUserEmailVerified(context.Background(), tt.args.userID, tt.args.resourceOwner, tt.args.email)
require.ErrorIs(t, err, tt.wantErr)
- assert.Equal(t, got, tt.want)
+ assert.Equal(t, tt.want, got)
})
}
}
@@ -720,27 +713,21 @@ func TestCommands_changeUserEmailWithGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "email-changed@test.ch",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailCodeAddedEventV2(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- "", false,
- ),
- ),
- },
+ user.NewHumanEmailChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "email-changed@test.ch",
+ ),
+ user.NewHumanEmailCodeAddedEventV2(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ "", false,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -783,27 +770,21 @@ func TestCommands_changeUserEmailWithGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "email-changed@test.ch",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailCodeAddedEventV2(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- "", true,
- ),
- ),
- },
+ user.NewHumanEmailChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "email-changed@test.ch",
+ ),
+ user.NewHumanEmailCodeAddedEventV2(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ "", true,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -847,27 +828,21 @@ func TestCommands_changeUserEmailWithGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "email-changed@test.ch",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanEmailCodeAddedEventV2(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- "https://example.com/email/verify?userID={{.UserID}}&code={{.Code}}&orgID={{.OrgID}}", false,
- ),
- ),
- },
+ user.NewHumanEmailChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "email-changed@test.ch",
+ ),
+ user.NewHumanEmailCodeAddedEventV2(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ "https://example.com/email/verify?userID={{.UserID}}&code={{.Code}}&orgID={{.OrgID}}", false,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -1023,13 +998,9 @@ func TestCommands_VerifyUserEmail(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailVerificationFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailVerificationFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1146,13 +1117,9 @@ func TestCommands_verifyUserEmailWithGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailVerificationFailedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailVerificationFailedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
@@ -1198,13 +1165,9 @@ func TestCommands_verifyUserEmailWithGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanEmailVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanEmailVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
},
diff --git a/internal/command/user_v2_passkey_test.go b/internal/command/user_v2_passkey_test.go
index 4d87e4bf45..2a735dab85 100644
--- a/internal/command/user_v2_passkey_test.go
+++ b/internal/command/user_v2_passkey_test.go
@@ -16,7 +16,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -175,9 +174,9 @@ func TestCommands_RegisterUserPasskeyWithCode(t *testing.T) {
),
),
expectFilter(eventFromEventPusher(testSecretGeneratorAddedEvent(domain.SecretGeneratorTypePasswordlessInitCode))),
- expectPush([]*repository.Event{eventFromEventPusher(
+ expectPush(
user.NewHumanPasswordlessInitCodeCheckFailedEvent(ctx, userAgg, "123"),
- )}),
+ ),
),
},
args: args{
@@ -286,9 +285,9 @@ func TestCommands_verifyUserPasskeyCode(t *testing.T) {
),
),
expectFilter(eventFromEventPusher(testSecretGeneratorAddedEvent(domain.SecretGeneratorTypePasswordlessInitCode))),
- expectPush([]*repository.Event{eventFromEventPusher(
+ expectPush(
user.NewHumanPasswordlessInitCodeCheckFailedEvent(ctx, userAgg, "123"),
- )}),
+ ),
),
},
args: args{
@@ -394,11 +393,11 @@ func TestCommands_pushUserPasskey(t *testing.T) {
{
name: "push error",
expectPush: func(challenge string) expect {
- return expectPushFailed(io.ErrClosedPipe, []*repository.Event{eventFromEventPusher(
+ return expectPushFailed(io.ErrClosedPipe,
user.NewHumanPasswordlessAddedEvent(ctx,
userAgg, "123", challenge, "rpID",
),
- )})
+ )
},
args: args{},
wantErr: io.ErrClosedPipe,
@@ -406,27 +405,23 @@ func TestCommands_pushUserPasskey(t *testing.T) {
{
name: "success",
expectPush: func(challenge string) expect {
- return expectPush([]*repository.Event{eventFromEventPusher(
+ return expectPush(
user.NewHumanPasswordlessAddedEvent(ctx,
userAgg, "123", challenge, "rpID",
),
- )})
+ )
},
args: args{},
},
{
name: "initcode succeeded event",
expectPush: func(challenge string) expect {
- return expectPush([]*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordlessAddedEvent(ctx,
- userAgg, "123", challenge, "rpID",
- ),
+ return expectPush(
+ user.NewHumanPasswordlessAddedEvent(ctx,
+ userAgg, "123", challenge, "rpID",
),
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeCheckSucceededEvent(ctx, userAgg, "123"),
- ),
- })
+ user.NewHumanPasswordlessInitCodeCheckSucceededEvent(ctx, userAgg, "123"),
+ )
},
args: args{
events: []eventCallback{func(ctx context.Context, userAgg *eventstore.Aggregate) eventstore.Command {
@@ -509,19 +504,17 @@ func TestCommands_AddUserPasskeyCode(t *testing.T) {
true,
),
)),
- expectPush([]*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
- userAgg,
- "123", &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("passkey1"),
- }, time.Minute, "", false,
- ),
+ expectPush(
+ user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
+ userAgg,
+ "123", &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("passkey1"),
+ }, time.Minute, "", false,
),
- }),
+ ),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "123"),
},
@@ -615,22 +608,20 @@ func TestCommands_AddUserPasskeyCodeURLTemplate(t *testing.T) {
true,
),
)),
- expectPush([]*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
- userAgg,
- "123", &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("passkey1"),
- },
- time.Minute,
- "https://example.com/passkey/register?userID={{.UserID}}&orgID={{.OrgID}}&codeID={{.CodeID}}&code={{.Code}}",
- false,
- ),
+ expectPush(
+ user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
+ userAgg,
+ "123", &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("passkey1"),
+ },
+ time.Minute,
+ "https://example.com/passkey/register?userID={{.UserID}}&orgID={{.OrgID}}&codeID={{.CodeID}}&code={{.Code}}",
+ false,
),
- }),
+ ),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "123"),
},
@@ -709,19 +700,17 @@ func TestCommands_AddUserPasskeyCodeReturn(t *testing.T) {
true,
),
)),
- expectPush([]*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
- userAgg,
- "123", &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("passkey1"),
- }, time.Minute, "", true,
- ),
+ expectPush(
+ user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
+ userAgg,
+ "123", &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("passkey1"),
+ }, time.Minute, "", true,
),
- }),
+ ),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "123"),
},
@@ -832,19 +821,17 @@ func TestCommands_addUserPasskeyCode(t *testing.T) {
true,
),
)),
- expectPushFailed(io.ErrClosedPipe, []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "123", &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("passkey1"),
- }, time.Minute, "", false,
- ),
+ expectPushFailed(io.ErrClosedPipe,
+ user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "123", &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("passkey1"),
+ }, time.Minute, "", false,
),
- }),
+ ),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "123"),
},
@@ -873,19 +860,17 @@ func TestCommands_addUserPasskeyCode(t *testing.T) {
true,
),
)),
- expectPush([]*repository.Event{
- eventFromEventPusher(
- user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
- userAgg,
- "123", &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("passkey1"),
- }, time.Minute, "", false,
- ),
+ expectPush(
+ user.NewHumanPasswordlessInitCodeRequestedEvent(context.Background(),
+ userAgg,
+ "123", &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("passkey1"),
+ }, time.Minute, "", false,
),
- }),
+ ),
),
idGenerator: id_mock.NewIDGeneratorExpectIDs(t, "123"),
},
diff --git a/internal/command/user_v2_password_test.go b/internal/command/user_v2_password_test.go
index ecf21ff180..2465c240f3 100644
--- a/internal/command/user_v2_password_test.go
+++ b/internal/command/user_v2_password_test.go
@@ -437,19 +437,18 @@ func TestCommands_requestPasswordReset(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("code"),
- },
- 10*time.Minute,
- domain.NotificationTypeEmail,
- "",
- false,
- )),
+ user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("code"),
+ },
+ 10*time.Minute,
+ domain.NotificationTypeEmail,
+ "",
+ false,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -478,19 +477,18 @@ func TestCommands_requestPasswordReset(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("code"),
- },
- 10*time.Minute,
- domain.NotificationTypeEmail,
- "https://example.com/password/changey?userID={{.UserID}}&code={{.Code}}&orgID={{.OrgID}}",
- false,
- )),
+ user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("code"),
+ },
+ 10*time.Minute,
+ domain.NotificationTypeEmail,
+ "https://example.com/password/changey?userID={{.UserID}}&code={{.Code}}&orgID={{.OrgID}}",
+ false,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -520,19 +518,18 @@ func TestCommands_requestPasswordReset(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("code"),
- },
- 10*time.Minute,
- domain.NotificationTypeSms,
- "https://example.com/password/changey?userID={{.UserID}}&code={{.Code}}&orgID={{.OrgID}}",
- false,
- )),
+ user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("code"),
+ },
+ 10*time.Minute,
+ domain.NotificationTypeSms,
+ "https://example.com/password/changey?userID={{.UserID}}&code={{.Code}}&orgID={{.OrgID}}",
+ false,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -563,19 +560,18 @@ func TestCommands_requestPasswordReset(t *testing.T) {
),
),
expectPush(
- eventPusherToEvents(
- user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("code"),
- },
- 10*time.Minute,
- domain.NotificationTypeEmail,
- "",
- true,
- )),
+ user.NewHumanPasswordCodeAddedEventV2(context.Background(), &user.NewAggregate("userID", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("code"),
+ },
+ 10*time.Minute,
+ domain.NotificationTypeEmail,
+ "",
+ true,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
diff --git a/internal/command/user_v2_phone_test.go b/internal/command/user_v2_phone_test.go
index 05da4e260c..3a4bab096b 100644
--- a/internal/command/user_v2_phone_test.go
+++ b/internal/command/user_v2_phone_test.go
@@ -15,7 +15,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -427,19 +426,13 @@ func TestCommands_ChangeUserPhoneVerified(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "+41791234568",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneVerifiedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- ),
- ),
- },
+ user.NewHumanPhoneChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "+41791234568",
+ ),
+ user.NewHumanPhoneVerifiedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -637,27 +630,21 @@ func TestCommands_changeUserPhoneWithGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "+41791234568",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEventV2(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- false,
- ),
- ),
- },
+ user.NewHumanPhoneChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "+41791234568",
+ ),
+ user.NewHumanPhoneCodeAddedEventV2(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ false,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
@@ -703,27 +690,21 @@ func TestCommands_changeUserPhoneWithGenerator(t *testing.T) {
),
),
expectPush(
- []*repository.Event{
- eventFromEventPusher(
- user.NewHumanPhoneChangedEvent(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- "+41791234568",
- ),
- ),
- eventFromEventPusher(
- user.NewHumanPhoneCodeAddedEventV2(context.Background(),
- &user.NewAggregate("user1", "org1").Aggregate,
- &crypto.CryptoValue{
- CryptoType: crypto.TypeEncryption,
- Algorithm: "enc",
- KeyID: "id",
- Crypted: []byte("a"),
- },
- time.Hour*1,
- true,
- ),
- ),
- },
+ user.NewHumanPhoneChangedEvent(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ "+41791234568",
+ ),
+ user.NewHumanPhoneCodeAddedEventV2(context.Background(),
+ &user.NewAggregate("user1", "org1").Aggregate,
+ &crypto.CryptoValue{
+ CryptoType: crypto.TypeEncryption,
+ Algorithm: "enc",
+ KeyID: "id",
+ Crypted: []byte("a"),
+ },
+ time.Hour*1,
+ true,
+ ),
),
),
checkPermission: newMockPermissionCheckAllowed(),
diff --git a/internal/command/user_v2_totp_test.go b/internal/command/user_v2_totp_test.go
index 32a5d9e09c..33c7dc1030 100644
--- a/internal/command/user_v2_totp_test.go
+++ b/internal/command/user_v2_totp_test.go
@@ -16,7 +16,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -59,7 +58,7 @@ func TestCommands_AddUserTOTP(t *testing.T) {
expectFilter(),
),
},
- wantErr: caos_errs.ThrowPreconditionFailed(nil, "COMMAND-MM9fs", "Errors.User.NotFound"),
+ wantErr: caos_errs.ThrowPreconditionFailed(nil, "COMMAND-SqyJz", "Errors.User.NotFound"),
},
{
name: "push error",
@@ -105,9 +104,9 @@ func TestCommands_AddUserTOTP(t *testing.T) {
),
),
expectFilter(),
- expectRandomPushFailed(io.ErrClosedPipe, []*repository.Event{eventFromEventPusher(
+ expectRandomPushFailed(io.ErrClosedPipe, []eventstore.Command{
user.NewHumanOTPAddedEvent(ctx, userAgg, nil),
- )}),
+ }),
),
},
wantErr: io.ErrClosedPipe,
@@ -156,9 +155,9 @@ func TestCommands_AddUserTOTP(t *testing.T) {
),
),
expectFilter(),
- expectRandomPush([]*repository.Event{eventFromEventPusher(
+ expectRandomPush([]eventstore.Command{
user.NewHumanOTPAddedEvent(ctx, userAgg, nil),
- )}),
+ }),
),
},
want: true,
@@ -230,9 +229,9 @@ func TestCommands_CheckUserTOTP(t *testing.T) {
user.NewHumanOTPAddedEvent(ctx, userAgg, secret),
),
),
- expectPush([]*repository.Event{eventFromEventPusher(
+ expectPush(
user.NewHumanOTPVerifiedEvent(ctx, userAgg, ""),
- )}),
+ ),
),
},
args: args{
diff --git a/internal/command/user_v2_u2f_test.go b/internal/command/user_v2_u2f_test.go
index 6ae5bf6e2d..9eb850004a 100644
--- a/internal/command/user_v2_u2f_test.go
+++ b/internal/command/user_v2_u2f_test.go
@@ -13,7 +13,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/id"
id_mock "github.com/zitadel/zitadel/internal/id/mock"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -173,22 +172,22 @@ func TestCommands_pushUserU2F(t *testing.T) {
{
name: "push error",
expectPush: func(challenge string) expect {
- return expectPushFailed(io.ErrClosedPipe, []*repository.Event{eventFromEventPusher(
+ return expectPushFailed(io.ErrClosedPipe,
user.NewHumanU2FAddedEvent(ctx,
userAgg, "123", challenge, "rpID",
),
- )})
+ )
},
wantErr: io.ErrClosedPipe,
},
{
name: "success",
expectPush: func(challenge string) expect {
- return expectPush([]*repository.Event{eventFromEventPusher(
+ return expectPush(
user.NewHumanU2FAddedEvent(ctx,
userAgg, "123", challenge, "rpID",
),
- )})
+ )
},
},
}
diff --git a/internal/database/cockroach/config.go b/internal/database/cockroach/config.go
deleted file mode 100644
index ca51af16d1..0000000000
--- a/internal/database/cockroach/config.go
+++ /dev/null
@@ -1,169 +0,0 @@
-package cockroach
-
-import (
- "database/sql"
- "strconv"
- "strings"
- "time"
-
- "github.com/mitchellh/mapstructure"
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/database/dialect"
-)
-
-const (
- sslDisabledMode = "disable"
- sslRequireMode = "require"
- sslAllowMode = "allow"
- sslPreferMode = "prefer"
-)
-
-type Config struct {
- Host string
- Port uint16
- Database string
- MaxOpenConns uint32
- MaxIdleConns uint32
- MaxConnLifetime time.Duration
- MaxConnIdleTime time.Duration
- User User
- Admin User
-
- //Additional options to be appended as options=
- //The value will be taken as is. Multiple options are space separated.
- Options string
-}
-
-func (c *Config) MatchName(name string) bool {
- for _, key := range []string{"crdb", "cockroach"} {
- if strings.TrimSpace(strings.ToLower(name)) == key {
- return true
- }
- }
- return false
-}
-
-func (c *Config) Decode(configs []interface{}) (dialect.Connector, error) {
- decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
- DecodeHook: mapstructure.StringToTimeDurationHookFunc(),
- WeaklyTypedInput: true,
- Result: c,
- })
- if err != nil {
- return nil, err
- }
-
- for _, config := range configs {
- if err = decoder.Decode(config); err != nil {
- return nil, err
- }
- }
- return c, nil
-}
-
-func (c *Config) Connect(useAdmin bool) (*sql.DB, error) {
- client, err := sql.Open("pgx", c.String(useAdmin))
- if err != nil {
- return nil, err
- }
-
- client.SetMaxOpenConns(int(c.MaxOpenConns))
- client.SetMaxIdleConns(int(c.MaxIdleConns))
- client.SetConnMaxLifetime(c.MaxConnLifetime)
- client.SetConnMaxIdleTime(c.MaxConnIdleTime)
-
- return client, nil
-}
-
-func (c *Config) DatabaseName() string {
- return c.Database
-}
-
-func (c *Config) Username() string {
- return c.User.Username
-}
-
-func (c *Config) Password() string {
- return c.User.Password
-}
-
-func (c *Config) Type() string {
- return "cockroach"
-}
-
-func (c *Config) Timetravel(d time.Duration) string {
- return ""
-}
-
-type User struct {
- Username string
- Password string
- SSL SSL
-}
-
-type SSL struct {
- // type of connection security
- Mode string
- // RootCert Path to the CA certificate
- RootCert string
- // Cert Path to the client certificate
- Cert string
- // Key Path to the client private key
- Key string
-}
-
-func (c *Config) checkSSL(user User) {
- if user.SSL.Mode == sslDisabledMode || user.SSL.Mode == "" {
- user.SSL = SSL{Mode: sslDisabledMode}
- return
- }
-
- if user.SSL.Mode == sslRequireMode || user.SSL.Mode == sslAllowMode || user.SSL.Mode == sslPreferMode {
- return
- }
-
- if user.SSL.RootCert == "" {
- logging.WithFields(
- "cert set", user.SSL.Cert != "",
- "key set", user.SSL.Key != "",
- "rootCert set", user.SSL.RootCert != "",
- ).Fatal("at least ssl root cert has to be set")
- }
-}
-
-func (c Config) String(useAdmin bool) string {
- user := c.User
- if useAdmin {
- user = c.Admin
- }
- c.checkSSL(user)
- fields := []string{
- "host=" + c.Host,
- "port=" + strconv.Itoa(int(c.Port)),
- "user=" + user.Username,
- "dbname=" + c.Database,
- "application_name=zitadel",
- "sslmode=" + user.SSL.Mode,
- }
- if c.Options != "" {
- fields = append(fields, "options="+c.Options)
- }
- if !useAdmin {
- fields = append(fields, "dbname="+c.Database)
- }
- if user.Password != "" {
- fields = append(fields, "password="+user.Password)
- }
- if user.SSL.Mode != sslDisabledMode {
- fields = append(fields, "sslrootcert="+user.SSL.RootCert)
- if user.SSL.Cert != "" {
- fields = append(fields, "sslcert="+user.SSL.Cert)
- }
- if user.SSL.Key != "" {
- fields = append(fields, "sslkey="+user.SSL.Key)
- }
- }
-
- return strings.Join(fields, " ")
-}
diff --git a/internal/database/cockroach/crdb.go b/internal/database/cockroach/crdb.go
index da634c9c83..7f43bb109c 100644
--- a/internal/database/cockroach/crdb.go
+++ b/internal/database/cockroach/crdb.go
@@ -1,6 +1,15 @@
package cockroach
import (
+ "database/sql"
+ "strconv"
+ "strings"
+ "time"
+
+ _ "github.com/jackc/pgx/v4/stdlib"
+ "github.com/mitchellh/mapstructure"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/database/dialect"
)
@@ -8,3 +17,173 @@ func init() {
config := &Config{}
dialect.Register(config, config, true)
}
+
+const (
+ sslDisabledMode = "disable"
+ sslRequireMode = "require"
+ sslAllowMode = "allow"
+ sslPreferMode = "prefer"
+)
+
+type Config struct {
+ Host string
+ Port uint16
+ Database string
+ MaxOpenConns uint32
+ MaxIdleConns uint32
+ MaxConnLifetime time.Duration
+ MaxConnIdleTime time.Duration
+ User User
+ Admin User
+ // Additional options to be appended as options=
+ // The value will be taken as is. Multiple options are space separated.
+ Options string
+}
+
+func (c *Config) MatchName(name string) bool {
+ for _, key := range []string{"crdb", "cockroach"} {
+ if strings.TrimSpace(strings.ToLower(name)) == key {
+ return true
+ }
+ }
+ return false
+}
+
+func (c *Config) Decode(configs []interface{}) (dialect.Connector, error) {
+ decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
+ DecodeHook: mapstructure.StringToTimeDurationHookFunc(),
+ WeaklyTypedInput: true,
+ Result: c,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ for _, config := range configs {
+ if err = decoder.Decode(config); err != nil {
+ return nil, err
+ }
+ }
+
+ return c, nil
+}
+
+func (c *Config) Connect(useAdmin, isEventPusher bool, pusherRatio float32, appName string) (*sql.DB, error) {
+ client, err := sql.Open("pgx", c.String(useAdmin, appName))
+ if err != nil {
+ return nil, err
+ }
+
+ connInfo, err := dialect.NewConnectionInfo(c.MaxOpenConns, c.MaxIdleConns, float64(pusherRatio))
+ if err != nil {
+ return nil, err
+ }
+
+ var maxConns, maxIdleConns uint32
+ if isEventPusher {
+ maxConns = connInfo.EventstorePusher.MaxOpenConns
+ maxIdleConns = connInfo.EventstorePusher.MaxIdleConns
+ } else {
+ maxConns = connInfo.ZITADEL.MaxOpenConns
+ maxIdleConns = connInfo.ZITADEL.MaxIdleConns
+ }
+
+ client.SetMaxOpenConns(int(maxConns))
+ client.SetMaxIdleConns(int(maxIdleConns))
+ client.SetConnMaxLifetime(c.MaxConnLifetime)
+ client.SetConnMaxIdleTime(c.MaxConnIdleTime)
+
+ return client, nil
+}
+
+func (c *Config) DatabaseName() string {
+ return c.Database
+}
+
+func (c *Config) Username() string {
+ return c.User.Username
+}
+
+func (c *Config) Password() string {
+ return c.User.Password
+}
+
+func (c *Config) Type() string {
+ return "cockroach"
+}
+
+func (c *Config) Timetravel(d time.Duration) string {
+ return ""
+}
+
+type User struct {
+ Username string
+ Password string
+ SSL SSL
+}
+
+type SSL struct {
+ // type of connection security
+ Mode string
+ // RootCert Path to the CA certificate
+ RootCert string
+ // Cert Path to the client certificate
+ Cert string
+ // Key Path to the client private key
+ Key string
+}
+
+func (c *Config) checkSSL(user User) {
+ if user.SSL.Mode == sslDisabledMode || user.SSL.Mode == "" {
+ user.SSL = SSL{Mode: sslDisabledMode}
+ return
+ }
+
+ if user.SSL.Mode == sslRequireMode || user.SSL.Mode == sslAllowMode || user.SSL.Mode == sslPreferMode {
+ return
+ }
+
+ if user.SSL.RootCert == "" {
+ logging.WithFields(
+ "cert set", user.SSL.Cert != "",
+ "key set", user.SSL.Key != "",
+ "rootCert set", user.SSL.RootCert != "",
+ ).Fatal("at least ssl root cert has to be set")
+ }
+}
+
+func (c Config) String(useAdmin bool, appName string) string {
+ user := c.User
+ if useAdmin {
+ user = c.Admin
+ }
+ c.checkSSL(user)
+ fields := []string{
+ "host=" + c.Host,
+ "port=" + strconv.Itoa(int(c.Port)),
+ "user=" + user.Username,
+ "dbname=" + c.Database,
+ "application_name=" + appName,
+ "sslmode=" + user.SSL.Mode,
+ }
+ if c.Options != "" {
+ fields = append(fields, "options="+c.Options)
+ }
+ if !useAdmin {
+ fields = append(fields, "dbname="+c.Database)
+ }
+ if user.Password != "" {
+ fields = append(fields, "password="+user.Password)
+ }
+ if user.SSL.Mode != sslDisabledMode {
+ fields = append(fields, "sslrootcert="+user.SSL.RootCert)
+ if user.SSL.Cert != "" {
+ fields = append(fields, "sslcert="+user.SSL.Cert)
+ }
+ if user.SSL.Key != "" {
+ fields = append(fields, "sslkey="+user.SSL.Key)
+ }
+ }
+
+ return strings.Join(fields, " ")
+}
diff --git a/internal/database/database.go b/internal/database/database.go
index 5f4de01220..c889a88420 100644
--- a/internal/database/database.go
+++ b/internal/database/database.go
@@ -5,6 +5,7 @@ import (
"database/sql"
"reflect"
+ "github.com/mitchellh/mapstructure"
"github.com/zitadel/logging"
_ "github.com/zitadel/zitadel/internal/database/cockroach"
@@ -14,8 +15,9 @@ import (
)
type Config struct {
- Dialects map[string]interface{} `mapstructure:",remain"`
- connector dialect.Connector
+ Dialects map[string]interface{} `mapstructure:",remain"`
+ EventPushConnRatio float32
+ connector dialect.Connector
}
func (c *Config) SetConnector(connector dialect.Connector) {
@@ -87,8 +89,18 @@ func (db *DB) QueryRowContext(ctx context.Context, scan func(row *sql.Row) error
return row.Err()
}
-func Connect(config Config, useAdmin bool) (*DB, error) {
- client, err := config.connector.Connect(useAdmin)
+const (
+ zitadelAppName = "zitadel"
+ EventstorePusherAppName = "zitadel_es_pusher"
+)
+
+func Connect(config Config, useAdmin, isEventPusher bool) (*DB, error) {
+ appName := zitadelAppName
+ if isEventPusher {
+ appName = EventstorePusherAppName
+ }
+
+ client, err := config.connector.Connect(useAdmin, isEventPusher, config.EventPushConnRatio, appName)
if err != nil {
return nil, err
}
@@ -103,20 +115,20 @@ func Connect(config Config, useAdmin bool) (*DB, error) {
}, nil
}
-func DecodeHook(from, to reflect.Value) (interface{}, error) {
+func DecodeHook(from, to reflect.Value) (_ interface{}, err error) {
if to.Type() != reflect.TypeOf(Config{}) {
return from.Interface(), nil
}
- configuredDialects, ok := from.Interface().(map[string]interface{})
- if !ok {
- return from.Interface(), nil
+ config := new(Config)
+ if err = mapstructure.Decode(from.Interface(), config); err != nil {
+ return nil, err
}
- configuredDialect := dialect.SelectByConfig(configuredDialects)
- configs := make([]interface{}, 0, len(configuredDialects)-1)
+ configuredDialect := dialect.SelectByConfig(config.Dialects)
+ configs := make([]interface{}, 0, len(config.Dialects)-1)
- for name, dialectConfig := range configuredDialects {
+ for name, dialectConfig := range config.Dialects {
if !configuredDialect.Matcher.MatchName(name) {
continue
}
@@ -124,12 +136,12 @@ func DecodeHook(from, to reflect.Value) (interface{}, error) {
configs = append(configs, dialectConfig)
}
- connector, err := configuredDialect.Matcher.Decode(configs)
+ config.connector, err = configuredDialect.Matcher.Decode(configs)
if err != nil {
return nil, err
}
- return Config{connector: connector}, nil
+ return config, nil
}
func (c Config) DatabaseName() string {
diff --git a/internal/database/dialect/config.go b/internal/database/dialect/config.go
index 9e3680710b..210e7126d3 100644
--- a/internal/database/dialect/config.go
+++ b/internal/database/dialect/config.go
@@ -6,11 +6,6 @@ import (
"time"
)
-type Config struct {
- Dialects map[string]interface{} `mapstructure:",remain"`
- Dialect Matcher
-}
-
type Dialect struct {
Matcher Matcher
Config Connector
@@ -29,7 +24,7 @@ type Matcher interface {
}
type Connector interface {
- Connect(useAdmin bool) (*sql.DB, error)
+ Connect(useAdmin, isEventPusher bool, pusherRatio float32, appName string) (*sql.DB, error)
Password() string
Database
}
diff --git a/internal/database/dialect/connections.go b/internal/database/dialect/connections.go
new file mode 100644
index 0000000000..bf3a4680f3
--- /dev/null
+++ b/internal/database/dialect/connections.go
@@ -0,0 +1,39 @@
+package dialect
+
+import "errors"
+
+type ConnectionInfo struct {
+ EventstorePusher ConnectionConfig
+ ZITADEL ConnectionConfig
+}
+
+type ConnectionConfig struct {
+ MaxOpenConns,
+ MaxIdleConns uint32
+}
+
+func NewConnectionInfo(openConns, idleConns uint32, pusherRatio float64) (*ConnectionInfo, error) {
+ if pusherRatio < 0 || pusherRatio > 1 {
+ return nil, errors.New("EventPushConnRatio must be between 0 and 1")
+ }
+ if openConns < 2 {
+ return nil, errors.New("MaxOpenConns of the database must be higher that 1")
+ }
+
+ info := new(ConnectionInfo)
+
+ info.EventstorePusher.MaxOpenConns = uint32(pusherRatio * float64(openConns))
+ info.EventstorePusher.MaxIdleConns = uint32(pusherRatio * float64(idleConns))
+
+ if info.EventstorePusher.MaxOpenConns < 1 && pusherRatio > 0 {
+ info.EventstorePusher.MaxOpenConns = 1
+ }
+ if info.EventstorePusher.MaxIdleConns < 1 && pusherRatio > 0 {
+ info.EventstorePusher.MaxIdleConns = 1
+ }
+
+ info.ZITADEL.MaxOpenConns = openConns - info.EventstorePusher.MaxOpenConns
+ info.ZITADEL.MaxIdleConns = idleConns - info.EventstorePusher.MaxIdleConns
+
+ return info, nil
+}
diff --git a/internal/database/mock/sql_mock.go b/internal/database/mock/sql_mock.go
new file mode 100644
index 0000000000..07d74151e0
--- /dev/null
+++ b/internal/database/mock/sql_mock.go
@@ -0,0 +1,129 @@
+package mock
+
+import (
+ "database/sql"
+ "database/sql/driver"
+ "reflect"
+ "testing"
+
+ "github.com/DATA-DOG/go-sqlmock"
+)
+
+type SQLMock struct {
+ DB *sql.DB
+ mock sqlmock.Sqlmock
+}
+
+type expectation func(m sqlmock.Sqlmock)
+
+func NewSQLMock(t *testing.T, expectations ...expectation) *SQLMock {
+ db, mock, err := sqlmock.New(
+ sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual),
+ )
+ if err != nil {
+ t.Fatal("create mock failed", err)
+ }
+
+ for _, expectation := range expectations {
+ expectation(mock)
+ }
+
+ return &SQLMock{
+ DB: db,
+ mock: mock,
+ }
+}
+
+func (m *SQLMock) Assert(t *testing.T) {
+ t.Helper()
+
+ if err := m.mock.ExpectationsWereMet(); err != nil {
+ t.Errorf("expectations not met: %v", err)
+ }
+
+ m.DB.Close()
+}
+
+func ExpectBegin(err error) expectation {
+ return func(m sqlmock.Sqlmock) {
+ e := m.ExpectBegin()
+ if err != nil {
+ e.WillReturnError(err)
+ }
+ }
+}
+
+type ExecOpt func(e *sqlmock.ExpectedExec) *sqlmock.ExpectedExec
+
+func WithExecArgs(args ...driver.Value) ExecOpt {
+ return func(e *sqlmock.ExpectedExec) *sqlmock.ExpectedExec {
+ return e.WithArgs(args...)
+ }
+}
+
+func WithExecErr(err error) ExecOpt {
+ return func(e *sqlmock.ExpectedExec) *sqlmock.ExpectedExec {
+ return e.WillReturnError(err)
+ }
+}
+
+func WithExecNoRowsAffected() ExecOpt {
+ return func(e *sqlmock.ExpectedExec) *sqlmock.ExpectedExec {
+ return e.WillReturnResult(driver.ResultNoRows)
+ }
+}
+
+func WithExecRowsAffected(affected driver.RowsAffected) ExecOpt {
+ return func(e *sqlmock.ExpectedExec) *sqlmock.ExpectedExec {
+ return e.WillReturnResult(affected)
+ }
+}
+
+func ExcpectExec(stmt string, opts ...ExecOpt) expectation {
+ return func(m sqlmock.Sqlmock) {
+ e := m.ExpectExec(stmt)
+ for _, opt := range opts {
+ e = opt(e)
+ }
+ }
+}
+
+type QueryOpt func(e *sqlmock.ExpectedQuery) *sqlmock.ExpectedQuery
+
+func WithQueryArgs(args ...driver.Value) QueryOpt {
+ return func(e *sqlmock.ExpectedQuery) *sqlmock.ExpectedQuery {
+ return e.WithArgs(args...)
+ }
+}
+
+func WithQueryErr(err error) QueryOpt {
+ return func(e *sqlmock.ExpectedQuery) *sqlmock.ExpectedQuery {
+ return e.WillReturnError(err)
+ }
+}
+
+func WithQueryResult(columns []string, rows [][]driver.Value) QueryOpt {
+ return func(e *sqlmock.ExpectedQuery) *sqlmock.ExpectedQuery {
+ mockedRows := sqlmock.NewRows(columns)
+ for _, row := range rows {
+ mockedRows = mockedRows.AddRow(row...)
+ }
+ return e.WillReturnRows(mockedRows)
+ }
+}
+
+func ExpectQuery(stmt string, opts ...QueryOpt) expectation {
+ return func(m sqlmock.Sqlmock) {
+ e := m.ExpectQuery(stmt)
+ for _, opt := range opts {
+ e = opt(e)
+ }
+ }
+}
+
+type AnyType[T interface{}] struct{}
+
+// Match satisfies sqlmock.Argument interface
+func (a AnyType[T]) Match(v driver.Value) bool {
+ return reflect.TypeOf(new(T)).Elem().Kind().String() == reflect.TypeOf(v).Kind().String()
+}
diff --git a/internal/database/postgres/config.go b/internal/database/postgres/config.go
deleted file mode 100644
index bacd099484..0000000000
--- a/internal/database/postgres/config.go
+++ /dev/null
@@ -1,172 +0,0 @@
-package postgres
-
-import (
- "database/sql"
- "strconv"
- "strings"
- "time"
-
- "github.com/mitchellh/mapstructure"
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/database/dialect"
-)
-
-const (
- sslDisabledMode = "disable"
- sslRequireMode = "require"
- sslAllowMode = "allow"
- sslPreferMode = "prefer"
-)
-
-type Config struct {
- Host string
- Port int32
- Database string
- MaxOpenConns uint32
- MaxIdleConns uint32
- MaxConnLifetime time.Duration
- MaxConnIdleTime time.Duration
- User User
- Admin User
-
- //Additional options to be appended as options=
- //The value will be taken as is. Multiple options are space separated.
- Options string
-}
-
-func (c *Config) MatchName(name string) bool {
- for _, key := range []string{"pg", "postgres"} {
- if strings.TrimSpace(strings.ToLower(name)) == key {
- return true
- }
- }
- return false
-}
-
-func (c *Config) Decode(configs []interface{}) (dialect.Connector, error) {
- decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
- DecodeHook: mapstructure.StringToTimeDurationHookFunc(),
- WeaklyTypedInput: true,
- Result: c,
- })
- if err != nil {
- return nil, err
- }
-
- for _, config := range configs {
- if err = decoder.Decode(config); err != nil {
- return nil, err
- }
- }
- return c, nil
-}
-
-func (c *Config) Connect(useAdmin bool) (*sql.DB, error) {
- db, err := sql.Open("pgx", c.String(useAdmin))
- if err != nil {
- return nil, err
- }
-
- db.SetMaxOpenConns(int(c.MaxOpenConns))
- db.SetMaxIdleConns(int(c.MaxIdleConns))
- db.SetConnMaxLifetime(c.MaxConnLifetime)
- db.SetConnMaxIdleTime(c.MaxConnIdleTime)
-
- return db, nil
-}
-
-func (c *Config) DatabaseName() string {
- return c.Database
-}
-
-func (c *Config) Username() string {
- return c.User.Username
-}
-
-func (c *Config) Password() string {
- return c.User.Password
-}
-
-func (c *Config) Type() string {
- return "postgres"
-}
-
-func (c *Config) Timetravel(time.Duration) string {
- return ""
-}
-
-type User struct {
- Username string
- Password string
- SSL SSL
-}
-
-type SSL struct {
- // type of connection security
- Mode string
- // RootCert Path to the CA certificate
- RootCert string
- // Cert Path to the client certificate
- Cert string
- // Key Path to the client private key
- Key string
-}
-
-func (s *Config) checkSSL(user User) {
- if user.SSL.Mode == sslDisabledMode || user.SSL.Mode == "" {
- user.SSL = SSL{Mode: sslDisabledMode}
- return
- }
-
- if user.SSL.Mode == sslRequireMode || user.SSL.Mode == sslAllowMode || user.SSL.Mode == sslPreferMode {
- return
- }
-
- if user.SSL.RootCert == "" {
- logging.WithFields(
- "cert set", user.SSL.Cert != "",
- "key set", user.SSL.Key != "",
- "rootCert set", user.SSL.RootCert != "",
- ).Fatal("at least ssl root cert has to be set")
- }
-}
-
-func (c Config) String(useAdmin bool) string {
- user := c.User
- if useAdmin {
- user = c.Admin
- }
- c.checkSSL(user)
- fields := []string{
- "host=" + c.Host,
- "port=" + strconv.Itoa(int(c.Port)),
- "user=" + user.Username,
- "application_name=zitadel",
- "sslmode=" + user.SSL.Mode,
- }
- if c.Options != "" {
- fields = append(fields, "options="+c.Options)
- }
- if user.Password != "" {
- fields = append(fields, "password="+user.Password)
- }
- if !useAdmin {
- fields = append(fields, "dbname="+c.Database)
- } else {
- fields = append(fields, "dbname=postgres")
- }
- if user.SSL.Mode != sslDisabledMode {
- if user.SSL.RootCert != "" {
- fields = append(fields, "sslrootcert="+user.SSL.RootCert)
- }
- if user.SSL.Cert != "" {
- fields = append(fields, "sslcert="+user.SSL.Cert)
- }
- if user.SSL.Key != "" {
- fields = append(fields, "sslkey="+user.SSL.Key)
- }
- }
-
- return strings.Join(fields, " ")
-}
diff --git a/internal/database/postgres/pg.go b/internal/database/postgres/pg.go
index 562d79e273..f46067a08d 100644
--- a/internal/database/postgres/pg.go
+++ b/internal/database/postgres/pg.go
@@ -1,9 +1,14 @@
package postgres
import (
+ "database/sql"
+ "strconv"
+ "strings"
+ "time"
- //sql import
_ "github.com/jackc/pgx/v4/stdlib"
+ "github.com/mitchellh/mapstructure"
+ "github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database/dialect"
)
@@ -12,3 +17,176 @@ func init() {
config := &Config{}
dialect.Register(config, config, false)
}
+
+const (
+ sslDisabledMode = "disable"
+ sslRequireMode = "require"
+ sslAllowMode = "allow"
+ sslPreferMode = "prefer"
+)
+
+type Config struct {
+ Host string
+ Port int32
+ Database string
+ EventPushConnRatio float64
+ MaxOpenConns uint32
+ MaxIdleConns uint32
+ MaxConnLifetime time.Duration
+ MaxConnIdleTime time.Duration
+ User User
+ Admin User
+ // Additional options to be appended as options=
+ // The value will be taken as is. Multiple options are space separated.
+ Options string
+}
+
+func (c *Config) MatchName(name string) bool {
+ for _, key := range []string{"pg", "postgres"} {
+ if strings.TrimSpace(strings.ToLower(name)) == key {
+ return true
+ }
+ }
+ return false
+}
+
+func (c *Config) Decode(configs []interface{}) (dialect.Connector, error) {
+ decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
+ DecodeHook: mapstructure.StringToTimeDurationHookFunc(),
+ WeaklyTypedInput: true,
+ Result: c,
+ })
+ if err != nil {
+ return nil, err
+ }
+
+ for _, config := range configs {
+ if err = decoder.Decode(config); err != nil {
+ return nil, err
+ }
+ }
+
+ return c, nil
+}
+
+func (c *Config) Connect(useAdmin, isEventPusher bool, pusherRatio float32, appName string) (*sql.DB, error) {
+ db, err := sql.Open("pgx", c.String(useAdmin, appName))
+ if err != nil {
+ return nil, err
+ }
+
+ connInfo, err := dialect.NewConnectionInfo(c.MaxOpenConns, c.MaxIdleConns, float64(pusherRatio))
+ if err != nil {
+ return nil, err
+ }
+
+ var maxConns, maxIdleConns uint32
+ if isEventPusher {
+ maxConns = connInfo.EventstorePusher.MaxOpenConns
+ maxIdleConns = connInfo.EventstorePusher.MaxIdleConns
+ } else {
+ maxConns = connInfo.ZITADEL.MaxOpenConns
+ maxIdleConns = connInfo.ZITADEL.MaxIdleConns
+ }
+ db.SetMaxOpenConns(int(maxConns))
+ db.SetMaxIdleConns(int(maxIdleConns))
+ db.SetConnMaxLifetime(c.MaxConnLifetime)
+ db.SetConnMaxIdleTime(c.MaxConnIdleTime)
+
+ return db, nil
+}
+
+func (c *Config) DatabaseName() string {
+ return c.Database
+}
+
+func (c *Config) Username() string {
+ return c.User.Username
+}
+
+func (c *Config) Password() string {
+ return c.User.Password
+}
+
+func (c *Config) Type() string {
+ return "postgres"
+}
+
+func (c *Config) Timetravel(time.Duration) string {
+ return ""
+}
+
+type User struct {
+ Username string
+ Password string
+ SSL SSL
+}
+
+type SSL struct {
+ // type of connection security
+ Mode string
+ // RootCert Path to the CA certificate
+ RootCert string
+ // Cert Path to the client certificate
+ Cert string
+ // Key Path to the client private key
+ Key string
+}
+
+func (s *Config) checkSSL(user User) {
+ if user.SSL.Mode == sslDisabledMode || user.SSL.Mode == "" {
+ user.SSL = SSL{Mode: sslDisabledMode}
+ return
+ }
+
+ if user.SSL.Mode == sslRequireMode || user.SSL.Mode == sslAllowMode || user.SSL.Mode == sslPreferMode {
+ return
+ }
+
+ if user.SSL.RootCert == "" {
+ logging.WithFields(
+ "cert set", user.SSL.Cert != "",
+ "key set", user.SSL.Key != "",
+ "rootCert set", user.SSL.RootCert != "",
+ ).Fatal("at least ssl root cert has to be set")
+ }
+}
+
+func (c Config) String(useAdmin bool, appName string) string {
+ user := c.User
+ if useAdmin {
+ user = c.Admin
+ }
+ c.checkSSL(user)
+ fields := []string{
+ "host=" + c.Host,
+ "port=" + strconv.Itoa(int(c.Port)),
+ "user=" + user.Username,
+ "application_name=" + appName,
+ "sslmode=" + user.SSL.Mode,
+ }
+ if c.Options != "" {
+ fields = append(fields, "options="+c.Options)
+ }
+ if user.Password != "" {
+ fields = append(fields, "password="+user.Password)
+ }
+ if !useAdmin {
+ fields = append(fields, "dbname="+c.Database)
+ } else {
+ fields = append(fields, "dbname=postgres")
+ }
+ if user.SSL.Mode != sslDisabledMode {
+ if user.SSL.RootCert != "" {
+ fields = append(fields, "sslrootcert="+user.SSL.RootCert)
+ }
+ if user.SSL.Cert != "" {
+ fields = append(fields, "sslcert="+user.SSL.Cert)
+ }
+ if user.SSL.Key != "" {
+ fields = append(fields, "sslkey="+user.SSL.Key)
+ }
+ }
+
+ return strings.Join(fields, " ")
+}
diff --git a/internal/database/type.go b/internal/database/type.go
index 4b863c1010..2608dc4f40 100644
--- a/internal/database/type.go
+++ b/internal/database/type.go
@@ -8,22 +8,19 @@ import (
"github.com/jackc/pgtype"
)
-type StringArray []string
+type TextArray[t ~string] []t
// Scan implements the [database/sql.Scanner] interface.
-func (s *StringArray) Scan(src any) error {
+func (s *TextArray[t]) Scan(src any) error {
array := new(pgtype.TextArray)
if err := array.Scan(src); err != nil {
return err
}
- if err := array.AssignTo(s); err != nil {
- return err
- }
- return nil
+ return array.AssignTo(s)
}
// Value implements the [database/sql/driver.Valuer] interface.
-func (s StringArray) Value() (driver.Value, error) {
+func (s TextArray[t]) Value() (driver.Value, error) {
if len(s) == 0 {
return nil, nil
}
@@ -36,37 +33,37 @@ func (s StringArray) Value() (driver.Value, error) {
return array.Value()
}
-type enumField interface {
+type arrayField interface {
~int8 | ~uint8 | ~int16 | ~uint16 | ~int32 | ~uint32
}
-type EnumArray[F enumField] []F
+type Array[F arrayField] []F
// Scan implements the [database/sql.Scanner] interface.
-func (s *EnumArray[F]) Scan(src any) error {
- array := new(pgtype.Int2Array)
+func (a *Array[F]) Scan(src any) error {
+ array := new(pgtype.Int8Array)
if err := array.Scan(src); err != nil {
return err
}
- ints := make([]int32, 0, len(array.Elements))
- if err := array.AssignTo(&ints); err != nil {
+ elements := make([]int64, len(array.Elements))
+ if err := array.AssignTo(&elements); err != nil {
return err
}
- *s = make([]F, len(ints))
- for i, a := range ints {
- (*s)[i] = F(a)
+ *a = make([]F, len(elements))
+ for i, element := range elements {
+ (*a)[i] = F(element)
}
return nil
}
// Value implements the [database/sql/driver.Valuer] interface.
-func (s EnumArray[F]) Value() (driver.Value, error) {
- if len(s) == 0 {
+func (a Array[F]) Value() (driver.Value, error) {
+ if len(a) == 0 {
return nil, nil
}
- array := pgtype.Int2Array{}
- if err := array.Set(s); err != nil {
+ array := pgtype.Int8Array{}
+ if err := array.Set(a); err != nil {
return nil, err
}
diff --git a/internal/database/type_test.go b/internal/database/type_test.go
index 4586f1413f..9ac777dab6 100644
--- a/internal/database/type_test.go
+++ b/internal/database/type_test.go
@@ -117,3 +117,85 @@ func TestMap_Value(t *testing.T) {
})
}
}
+
+func TestArray_ScanInt32(t *testing.T) {
+ type args struct {
+ src any
+ }
+ type res[V arrayField] struct {
+ want Array[V]
+ err bool
+ }
+ type testCase[V arrayField] struct {
+ name string
+ m Array[V]
+ args args
+ res[V]
+ }
+ tests := []testCase[int32]{
+ {
+ "number",
+ Array[int32]{},
+ args{src: "{1,2}"},
+ res[int32]{
+ want: []int32{1, 2},
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if err := tt.m.Scan(tt.args.src); (err != nil) != tt.res.err {
+ t.Errorf("Scan() error = %v, wantErr %v", err, tt.res.err)
+ }
+
+ assert.Equal(t, tt.res.want, tt.m)
+ })
+ }
+}
+
+func TestArray_Value(t *testing.T) {
+ type res struct {
+ want driver.Value
+ err bool
+ }
+ type testCase[V arrayField] struct {
+ name string
+ a Array[V]
+ res res
+ }
+ tests := []testCase[int32]{
+ {
+ "nil",
+ nil,
+ res{
+ want: nil,
+ },
+ },
+ {
+ "empty",
+ Array[int32]{},
+ res{
+ want: nil,
+ },
+ },
+ {
+ "set",
+ Array[int32]([]int32{1, 2}),
+ res{
+ want: driver.Value(string([]byte(`{1,2}`))),
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got, err := tt.a.Value()
+ if tt.res.err {
+ assert.Error(t, err)
+ }
+ if !tt.res.err {
+ require.NoError(t, err)
+ assert.Equalf(t, tt.res.want, got, "Value()")
+ }
+ })
+ }
+}
diff --git a/internal/eventstore/aggregate.go b/internal/eventstore/aggregate.go
index 15ffe86223..e6b90fd88e 100644
--- a/internal/eventstore/aggregate.go
+++ b/internal/eventstore/aggregate.go
@@ -8,7 +8,7 @@ import (
type aggregateOpt func(*Aggregate)
-//NewAggregate is the default constructor of an aggregate
+// NewAggregate is the default constructor of an aggregate
// opts overwrite values calculated by given parameters
func NewAggregate(
ctx context.Context,
@@ -32,7 +32,7 @@ func NewAggregate(
return a
}
-//WithResourceOwner overwrites the resource owner of the aggregate
+// WithResourceOwner overwrites the resource owner of the aggregate
// by default the resource owner is set by the context
func WithResourceOwner(resourceOwner string) aggregateOpt {
return func(aggregate *Aggregate) {
@@ -40,36 +40,48 @@ func WithResourceOwner(resourceOwner string) aggregateOpt {
}
}
-//AggregateFromWriteModel maps the given WriteModel to an Aggregate
+// WithInstanceID overwrites the instance id of the aggregate
+// by default the instance is set by the context
+func WithInstanceID(id string) aggregateOpt {
+ return func(aggregate *Aggregate) {
+ aggregate.InstanceID = id
+ }
+}
+
+// AggregateFromWriteModel maps the given WriteModel to an Aggregate
func AggregateFromWriteModel(
wm *WriteModel,
typ AggregateType,
version Version,
) *Aggregate {
- return &Aggregate{
- ID: wm.AggregateID,
- Type: typ,
- ResourceOwner: wm.ResourceOwner,
- InstanceID: wm.InstanceID,
- Version: version,
- }
+ return NewAggregate(
+ context.Background(),
+ wm.AggregateID,
+ typ,
+ version,
+ WithResourceOwner(wm.ResourceOwner),
+ WithInstanceID(wm.InstanceID),
+ )
}
-//Aggregate is the basic implementation of Aggregater
+// Aggregate is the basic implementation of Aggregater
type Aggregate struct {
- //ID is the unique identitfier of this aggregate
+ // ID is the unique identitfier of this aggregate
ID string `json:"-"`
- //Type is the name of the aggregate.
+ // Type is the name of the aggregate.
Type AggregateType `json:"-"`
- //ResourceOwner is the org this aggregates belongs to
+ // ResourceOwner is the org this aggregates belongs to
ResourceOwner string `json:"-"`
- //InstanceID is the instance this aggregate belongs to
+ // InstanceID is the instance this aggregate belongs to
InstanceID string `json:"-"`
- //Version is the semver this aggregate represents
+ // Version is the semver this aggregate represents
Version Version `json:"-"`
}
-func isAggreagteTypes(a Aggregate, types ...AggregateType) bool {
+// AggregateType is the object name
+type AggregateType string
+
+func isAggreagteTypes(a *Aggregate, types ...AggregateType) bool {
for _, typ := range types {
if a.Type == typ {
return true
@@ -78,7 +90,7 @@ func isAggreagteTypes(a Aggregate, types ...AggregateType) bool {
return false
}
-func isAggregateIDs(a Aggregate, ids ...string) bool {
+func isAggregateIDs(a *Aggregate, ids ...string) bool {
for _, id := range ids {
if a.ID == id {
return true
diff --git a/internal/eventstore/bench_payload.txt b/internal/eventstore/bench_payload.txt
new file mode 100644
index 0000000000..c8f5422c24
--- /dev/null
+++ b/internal/eventstore/bench_payload.txt
@@ -0,0 +1,33 @@
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla nec pharetra neque. Nam viverra elit lorem, sit amet euismod velit pulvinar vulputate. Donec bibendum convallis sodales. Pellentesque mattis massa id hendrerit suscipit. Vivamus a placerat mauris. Cras laoreet sapien eget commodo aliquet. Integer bibendum gravida augue, ultricies varius felis porttitor sed. Nullam scelerisque neque nec magna mattis rhoncus. Curabitur dictum luctus erat, vel dapibus est porta hendrerit. Donec in mauris eleifend, imperdiet nunc in, condimentum mi. Suspendisse viverra rhoncus pharetra. Sed ornare ipsum vitae eros consequat rutrum. In ullamcorper non ipsum vel aliquam. Praesent at tortor ut metus elementum mollis. Morbi orci nisi, feugiat placerat tempor id, imperdiet sed diam.
+
+Quisque finibus sit amet erat quis lobortis. Praesent sit amet eros lectus. Pellentesque viverra purus in augue pretium, vitae ultricies orci fermentum. Sed ut eleifend metus. Suspendisse eget facilisis velit. Vestibulum sagittis turpis felis, in ultricies mauris sagittis sed. Donec facilisis suscipit placerat. Ut consequat varius elit ac semper. Nulla convallis nisi eu lorem porttitor posuere. Aliquam molestie egestas odio a scelerisque. Nunc aliquet dui eget ipsum hendrerit, et aliquet ligula vulputate. Duis ac ullamcorper tellus. Sed sit amet semper magna, ut blandit neque. Mauris vitae sem tempor, ullamcorper velit sit amet, rutrum sapien. Quisque scelerisque sollicitudin lectus quis dictum.
+
+Duis convallis, dui aliquet imperdiet aliquam, nisl sem vehicula nisi, eleifend dignissim velit nunc nec sem. In euismod laoreet lacinia. Etiam euismod risus neque, sed dapibus nisl iaculis non. Vivamus porta nec risus ut tincidunt. Sed elementum metus at mauris pellentesque, ultrices pharetra arcu accumsan. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus risus mi, mollis eget condimentum sed, pulvinar viverra nunc. Nam sit amet scelerisque mauris.
+
+Pellentesque vitae tellus blandit ligula gravida iaculis. Pellentesque nec ex tellus. Vivamus egestas metus lacus, non iaculis est rutrum sodales. Phasellus eu mi tempus ligula mollis molestie. Suspendisse sit amet urna faucibus, tincidunt sem nec, faucibus massa. Integer vitae dui odio. Praesent finibus, quam posuere sodales maximus, libero quam vehicula massa, non dictum est risus non dui. Etiam elit risus, molestie et viverra in, dignissim et tortor. Curabitur posuere nunc id ante hendrerit, non semper neque rhoncus.
+
+Pellentesque in libero in dolor euismod elementum. Vestibulum malesuada sodales lacinia. Praesent tellus nisl, ultrices vel massa eu, bibendum tincidunt eros. Pellentesque in rhoncus mi. Nulla sit amet lectus eleifend, varius quam sed, hendrerit risus. Sed molestie ipsum vel sapien condimentum blandit. Etiam ex nibh, dignissim et vestibulum ac, tempus et lectus. Mauris elit libero, tempus non scelerisque at, lacinia id elit. Integer erat velit, mollis vel laoreet eu, interdum feugiat mauris. Praesent et tincidunt lorem. Praesent finibus lobortis orci, non sagittis turpis rutrum et.
+
+Donec et nisi nec neque condimentum sodales nec eget nisi. Nulla facilisi. Maecenas convallis, enim eu tristique rhoncus, neque urna aliquet lectus, sit amet porttitor eros neque nec ante. Suspendisse malesuada leo ut leo molestie iaculis. Nullam pretium ac eros vel finibus. Curabitur interdum iaculis enim vel imperdiet. Nam rutrum facilisis nisl, ut faucibus urna congue nec. Aenean ac diam magna.
+
+Curabitur tempor, magna in eleifend tincidunt, nulla quam pellentesque augue, et hendrerit dui quam quis erat. Praesent id odio sed arcu eleifend volutpat. Integer ut massa sit amet ipsum egestas facilisis. Nulla facilisis mi et velit cursus, non sagittis turpis blandit. Duis iaculis neque a sapien imperdiet pellentesque. Nam urna nisi, euismod eu velit ac, mattis efficitur lorem. Duis in dignissim ante, a elementum felis. Quisque vestibulum malesuada malesuada. Donec ultricies, purus sed tincidunt efficitur, nisl nunc aliquet orci, at euismod est magna id dolor. Aliquam ornare placerat ex, at vulputate dui sagittis nec. Proin lorem lorem, pharetra ut lectus et, gravida euismod augue. Nullam aliquam id neque a tristique. Quisque non ante a orci porta vulputate eu non eros. Vestibulum velit velit, placerat sit amet malesuada quis, auctor at nunc.
+
+Phasellus viverra lacus sed metus cursus fermentum. Fusce at congue nisl, at pharetra nunc. Nam maximus viverra dolor, sit amet vestibulum erat dignissim sit amet. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam at pellentesque mauris. Morbi vestibulum diam et vehicula suscipit. Suspendisse ex purus, varius et efficitur id, blandit a libero. Sed dapibus, neque eget finibus vulputate, ipsum sapien aliquam risus, convallis varius nulla velit a massa. Quisque eleifend ligula in sapien bibendum maximus. In ut bibendum nisi, fringilla mollis ex.
+
+Suspendisse a est vel neque venenatis mollis ac egestas quam. Aenean at pretium massa, vitae rutrum est. Quisque et turpis velit. Mauris egestas nisl non mattis tempus. Pellentesque et magna nulla. Sed dolor odio, vehicula a lacus a, placerat pellentesque ante. Nam maximus dui fermentum, ornare ipsum ut, scelerisque odio. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam ac dictum mi. Integer porta dapibus orci, sollicitudin pharetra arcu mollis sed. Donec iaculis quam urna, ac tempus erat auctor eu. Maecenas pulvinar bibendum justo, sit amet blandit tortor. Maecenas id facilisis diam, a viverra odio.
+
+Proin at ullamcorper orci. Pellentesque dapibus, mauris ut auctor rutrum, elit arcu fermentum dolor, sit amet porta leo lacus sed sapien. Fusce pharetra nulla a venenatis tempor. Curabitur ut nibh nunc. Nunc vel libero ante. Fusce quis erat sit amet dui facilisis laoreet. Sed egestas neque quam, sed mollis sem scelerisque imperdiet. Integer vulputate orci et eros scelerisque, sed feugiat lorem tincidunt. Fusce porta semper nulla, eget sollicitudin mi tincidunt quis. Nulla facilisi. Duis suscipit turpis id sem faucibus bibendum.
+
+Cras elementum auctor mauris, ac finibus nisi fermentum non. Fusce congue enim mi, ac viverra lectus rutrum in. Curabitur sodales nibh est, in scelerisque dolor lobortis non. Duis non massa non ante finibus vehicula sed at est. Nulla facilisis porta magna, non convallis urna efficitur eget. Nunc nec libero nec felis facilisis sagittis. Cras aliquet neque et sapien dignissim ultrices. Donec blandit est metus. Vivamus pellentesque nec risus et tincidunt. Etiam nulla nibh, vehicula et tincidunt sit amet, porttitor a purus. Sed vel leo ante. Fusce purus felis, maximus sed erat ac, tincidunt volutpat felis. Vestibulum a ullamcorper magna. In luctus fringilla lectus, viverra vehicula velit. Suspendisse at nisl eget felis pretium faucibus tempor at nibh.
+
+Pellentesque vitae ligula suscipit, fermentum mauris eget, mollis magna. Duis posuere iaculis enim sit amet mattis. Donec tincidunt libero sapien, vitae convallis risus fringilla quis. Suspendisse elementum nisl urna. Aliquam erat volutpat. Mauris lacinia elit quis turpis lacinia rutrum. Donec varius a sapien et maximus. Nullam nec finibus libero. Duis pulvinar est urna, eleifend faucibus urna fringilla sed. Pellentesque pretium fermentum est, a dignissim ante cursus ut.
+
+Ut et massa finibus, pulvinar metus quis, pulvinar nulla. Vestibulum euismod congue euismod. Praesent tincidunt scelerisque suscipit. Sed condimentum massa quis cursus sodales. Vestibulum feugiat elit ac lobortis porta. Phasellus luctus aliquet enim ac efficitur. Nam accumsan est nunc, non malesuada nisl pretium ac. Integer id turpis hendrerit, rutrum nibh malesuada, mollis ipsum. Etiam porta aliquam leo, eget luctus nunc pretium eu. Quisque molestie risus sem, vel commodo enim ultricies tempus. Nulla cursus facilisis lacus nec aliquet. Nullam consequat arcu in mi vehicula, sit amet viverra lectus lacinia. Aliquam congue, sapien sed mattis mollis, lacus felis ultricies lectus, sed ultricies augue tellus vel purus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae;
+
+Integer sagittis, eros luctus semper malesuada, leo est sodales lacus, quis mollis tellus ex in justo. Donec ante nibh, viverra quis nibh quis, tempor interdum sem. Donec eu consequat sapien. Pellentesque aliquam neque mauris, et dictum arcu ultricies eu. Sed mattis risus eu turpis sagittis placerat. Nunc viverra mi elit, ac dapibus leo malesuada nec. Nunc eget augue ut massa condimentum faucibus sed vitae justo. Nunc leo lectus, iaculis in lobortis ac, dictum ut metus. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Quisque semper vestibulum lacinia.
+
+Quisque ornare gravida libero et laoreet. Morbi condimentum aliquam libero, sed interdum risus efficitur nec. Pellentesque in justo blandit, varius eros non, placerat nisl. Mauris turpis sem, congue at egestas sed, luctus id sapien. Maecenas volutpat, massa sit amet cursus interdum, augue odio fermentum orci, eget accumsan metus mi a augue. Quisque pharetra efficitur turpis, in mattis ipsum suscipit quis. Duis eu consectetur libero. Aenean imperdiet purus nec nibh luctus, sit amet blandit leo euismod.
+
+Donec placerat ut urna vitae porta. Proin ipsum elit, consectetur quis magna at, ultrices commodo lectus. Nulla cursus felis sed libero laoreet blandit. Maecenas mollis, sapien eget aliquet maximus, est tellus consequat dolor, eu tempor sapien ante sit amet arcu. Integer et lectus mi. Sed ullamcorper, enim sed porttitor commodo, sem leo rhoncus velit, sed gravida ipsum est nec ante. Aenean malesuada metus ornare mattis gravida. Fusce porttitor mattis dolor, quis convallis sem. Sed sed ex nisi. Etiam lacus felis, pulvinar et rutrum sed, lobortis nec ex. Pellentesque at dignissim metus. Nunc quis pellentesque ligula. Maecenas ut neque eget dolor ultricies condimentum. Suspendisse eget luctus dolor.
+
+Etiam vitae mattis arcu. Morbi faucibus et justo vel malesuada. Suspendisse semper molestie lorem in tempus. Aliquam ut mauris non velit laoreet sagittis. Sed ac efficitur nibh. Praesent commodo erat a nunc placerat vestibulum. Phasellus laoreet vitae tortor nec aliquet. Fusce nibh augue, mollis sed urna ut, tristique venenatis arcu.
diff --git a/internal/eventstore/config.go b/internal/eventstore/config.go
index 21011dea67..96e788f50c 100644
--- a/internal/eventstore/config.go
+++ b/internal/eventstore/config.go
@@ -2,25 +2,11 @@ package eventstore
import (
"time"
-
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
- z_sql "github.com/zitadel/zitadel/internal/eventstore/repository/sql"
)
type Config struct {
- PushTimeout time.Duration
- Client *database.DB
- AllowOrderByCreationDate bool
+ PushTimeout time.Duration
- repo repository.Repository
-}
-
-func TestConfig(repo repository.Repository) *Config {
- return &Config{repo: repo}
-}
-
-func Start(config *Config) (*Eventstore, error) {
- config.repo = z_sql.NewCRDB(config.Client, config.AllowOrderByCreationDate)
- return NewEventstore(config), nil
+ Pusher Pusher
+ Querier Querier
}
diff --git a/internal/eventstore/event.go b/internal/eventstore/event.go
index 51dad061ed..6469db5d61 100644
--- a/internal/eventstore/event.go
+++ b/internal/eventstore/event.go
@@ -1,51 +1,102 @@
package eventstore
import (
+ "encoding/json"
+ "reflect"
"time"
+
+ "github.com/zitadel/zitadel/internal/errors"
)
+type action interface {
+ Aggregate() *Aggregate
+
+ // Creator is the userid of the user which created the action
+ Creator() string
+ // Type describes the action
+ Type() EventType
+ // Revision of the action
+ Revision() uint16
+}
+
// Command is the intend to store an event into the eventstore
type Command interface {
- //Aggregate is the metadata of an aggregate
- Aggregate() Aggregate
- // EditorService is the service who wants to push the event
- EditorService() string
- //EditorUser is the user who wants to push the event
- EditorUser() string
- //KeyType must return an event type which should be unique in the aggregate
- Type() EventType
- //Data returns the payload of the event. It represent the changed fields by the event
+ action
+ // Payload returns the payload of the event. It represent the changed fields by the event
// valid types are:
- // * nil (no payload),
- // * json byte array
- // * struct which can be marshalled to json
- // * pointer to struct which can be marshalled to json
- Data() interface{}
- //UniqueConstraints should be added for unique attributes of an event, if nil constraints will not be checked
- UniqueConstraints() []*EventUniqueConstraint
+ // * nil: no payload
+ // * struct: which can be marshalled to json
+ // * pointer: to struct which can be marshalled to json
+ // * []byte: json marshalled data
+ Payload() any
+ // UniqueConstraints should be added for unique attributes of an event, if nil constraints will not be checked
+ UniqueConstraints() []*UniqueConstraint
}
// Event is a stored activity
type Event interface {
- // EditorService is the service who pushed the event
- EditorService() string
- //EditorUser is the user who pushed the event
- EditorUser() string
- //KeyType is the type of the event
- Type() EventType
-
- Aggregate() Aggregate
+ action
+ // Sequence of the event in the aggregate
Sequence() uint64
- CreationDate() time.Time
- //PreviousAggregateSequence returns the previous sequence of the aggregate root (e.g. for org.42508134)
- PreviousAggregateSequence() uint64
- //PreviousAggregateTypeSequence returns the previous sequence of the aggregate type (e.g. for org)
- PreviousAggregateTypeSequence() uint64
- //DataAsBytes returns the payload of the event. It represent the changed fields by the event
+ // CreatedAt is the time the event was created at
+ CreatedAt() time.Time
+ // Position is the global position of the event
+ Position() float64
+
+ // Unmarshal parses the payload and stores the result
+ // in the value pointed to by ptr. If ptr is nil or not a pointer,
+ // Unmarshal returns an error
+ Unmarshal(ptr any) error
+
+ // Deprecated: only use for migration
DataAsBytes() []byte
}
+type EventType string
+
+func EventData(event Command) ([]byte, error) {
+ switch data := event.Payload().(type) {
+ case nil:
+ return nil, nil
+ case []byte:
+ if json.Valid(data) {
+ return data, nil
+ }
+ return nil, errors.ThrowInvalidArgument(nil, "V2-6SbbS", "data bytes are not json")
+ }
+ dataType := reflect.TypeOf(event.Payload())
+ if dataType.Kind() == reflect.Ptr {
+ dataType = dataType.Elem()
+ }
+ if dataType.Kind() == reflect.Struct {
+ dataBytes, err := json.Marshal(event.Payload())
+ if err != nil {
+ return nil, errors.ThrowInvalidArgument(err, "V2-xG87M", "could not marshal data")
+ }
+ return dataBytes, nil
+ }
+ return nil, errors.ThrowInvalidArgument(nil, "V2-91NRm", "wrong type of event data")
+}
+
+type BaseEventSetter[T any] interface {
+ Event
+ SetBaseEvent(*BaseEvent)
+ *T
+}
+
+func GenericEventMapper[T any, PT BaseEventSetter[T]](event Event) (Event, error) {
+ e := PT(new(T))
+ e.SetBaseEvent(BaseEventFromRepo(event))
+
+ err := event.Unmarshal(e)
+ if err != nil {
+ return nil, errors.ThrowInternal(err, "ES-Thai6", "unable to unmarshal event")
+ }
+
+ return e, nil
+}
+
func isEventTypes(event Event, types ...EventType) bool {
for _, typ := range types {
if event.Type() == typ {
diff --git a/internal/eventstore/event_base.go b/internal/eventstore/event_base.go
index cb404feba5..5bb117b14a 100644
--- a/internal/eventstore/event_base.go
+++ b/internal/eventstore/event_base.go
@@ -2,21 +2,27 @@ package eventstore
import (
"context"
+ "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/service"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
-//BaseEvent represents the minimum metadata of an event
+var (
+ _ Event = (*BaseEvent)(nil)
+)
+
+// BaseEvent represents the minimum metadata of an event
type BaseEvent struct {
+ ID string
EventType EventType `json:"-"`
- aggregate Aggregate
+ Agg *Aggregate
- sequence uint64
- creationDate time.Time
+ Seq uint64
+ Pos float64
+ Creation time.Time
previousAggregateSequence uint64
previousAggregateTypeSequence uint64
@@ -27,78 +33,91 @@ type BaseEvent struct {
Data []byte `json:"-"`
}
+// Position implements Event.
+func (e *BaseEvent) Position() float64 {
+ return e.Pos
+}
+
// EditorService implements Command
func (e *BaseEvent) EditorService() string {
return e.Service
}
-//EditorUser implements Command
+// EditorUser implements Command
func (e *BaseEvent) EditorUser() string {
return e.User
}
-//Type implements Command
+// Creator implements action
+func (e *BaseEvent) Creator() string {
+ return e.EditorUser()
+}
+
+// Type implements action
func (e *BaseEvent) Type() EventType {
return e.EventType
}
-//Sequence is an upcounting unique number of the event
+// Sequence is an upcounting unique number of the event
func (e *BaseEvent) Sequence() uint64 {
- return e.sequence
+ return e.Seq
}
-//CreationDate is the the time, the event is inserted into the eventstore
+// CreationDate is the the time, the event is inserted into the eventstore
func (e *BaseEvent) CreationDate() time.Time {
- return e.creationDate
+ return e.Creation
}
-//Aggregate represents the metadata of the event's aggregate
-func (e *BaseEvent) Aggregate() Aggregate {
- return e.aggregate
+// CreatedAt implements Event
+func (e *BaseEvent) CreatedAt() time.Time {
+ return e.CreationDate()
}
-//Data returns the payload of the event. It represent the changed fields by the event
+// Aggregate implements action
+func (e *BaseEvent) Aggregate() *Aggregate {
+ return e.Agg
+}
+
+// Data returns the payload of the event. It represent the changed fields by the event
func (e *BaseEvent) DataAsBytes() []byte {
return e.Data
}
-//PreviousAggregateSequence implements EventReader
-func (e *BaseEvent) PreviousAggregateSequence() uint64 {
- return e.previousAggregateSequence
+// Revision implements action
+func (*BaseEvent) Revision() uint16 {
+ return 0
}
-//PreviousAggregateTypeSequence implements EventReader
-func (e *BaseEvent) PreviousAggregateTypeSequence() uint64 {
- return e.previousAggregateTypeSequence
+// Unmarshal implements Event
+func (e *BaseEvent) Unmarshal(ptr any) error {
+ if len(e.Data) == 0 {
+ return nil
+ }
+ return json.Unmarshal(e.Data, ptr)
}
-//BaseEventFromRepo maps a stored event to a BaseEvent
-func BaseEventFromRepo(event *repository.Event) *BaseEvent {
+const defaultService = "zitadel"
+
+// BaseEventFromRepo maps a stored event to a BaseEvent
+func BaseEventFromRepo(event Event) *BaseEvent {
return &BaseEvent{
- aggregate: Aggregate{
- ID: event.AggregateID,
- Type: AggregateType(event.AggregateType),
- ResourceOwner: event.ResourceOwner.String,
- InstanceID: event.InstanceID,
- Version: Version(event.Version),
- },
- EventType: EventType(event.Type),
- creationDate: event.CreationDate,
- sequence: event.Sequence,
- previousAggregateSequence: event.PreviousAggregateSequence,
- previousAggregateTypeSequence: event.PreviousAggregateTypeSequence,
- Service: event.EditorService,
- User: event.EditorUser,
- Data: event.Data,
+ Agg: event.Aggregate(),
+ EventType: event.Type(),
+ Creation: event.CreatedAt(),
+ Seq: event.Sequence(),
+ Service: defaultService,
+ User: event.Creator(),
+ Data: event.DataAsBytes(),
+ Pos: event.Position(),
}
}
-//NewBaseEventForPush is the constructor for event's which will be pushed into the eventstore
+// NewBaseEventForPush is the constructor for event's which will be pushed into the eventstore
// the resource owner of the aggregate is only used if it's the first event of this aggregate type
// afterwards the resource owner of the first previous events is taken
func NewBaseEventForPush(ctx context.Context, aggregate *Aggregate, typ EventType) *BaseEvent {
return &BaseEvent{
- aggregate: *aggregate,
+ Agg: aggregate,
User: authz.GetCtxData(ctx).UserID,
Service: service.FromContext(ctx),
EventType: typ,
diff --git a/internal/eventstore/eventstore.go b/internal/eventstore/eventstore.go
index f602a53f12..2a8d8a02d7 100644
--- a/internal/eventstore/eventstore.go
+++ b/internal/eventstore/eventstore.go
@@ -2,91 +2,75 @@ package eventstore
import (
"context"
- "database/sql"
- "encoding/json"
- "reflect"
"sort"
"sync"
"time"
"github.com/zitadel/zitadel/internal/api/authz"
- "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
// Eventstore abstracts all functions needed to store valid events
// and filters the stored events
type Eventstore struct {
- repo repository.Repository
interceptorMutex sync.Mutex
eventInterceptors map[EventType]eventTypeInterceptors
eventTypes []string
aggregateTypes []string
PushTimeout time.Duration
- instancesMu sync.Mutex
- instances []string
- lastInstancesQuery time.Time
+ pusher Pusher
+ querier Querier
+
+ instances []string
+ lastInstanceQuery time.Time
+ instancesMu sync.Mutex
}
type eventTypeInterceptors struct {
- eventMapper func(*repository.Event) (Event, error)
+ eventMapper func(Event) (Event, error)
}
func NewEventstore(config *Config) *Eventstore {
return &Eventstore{
- repo: config.repo,
eventInterceptors: map[EventType]eventTypeInterceptors{},
interceptorMutex: sync.Mutex{},
PushTimeout: config.PushTimeout,
+
+ pusher: config.Pusher,
+ querier: config.Querier,
+
+ instancesMu: sync.Mutex{},
}
}
// Health checks if the eventstore can properly work
// It checks if the repository can serve load
func (es *Eventstore) Health(ctx context.Context) error {
- return es.repo.Health(ctx)
+ if err := es.pusher.Health(ctx); err != nil {
+ return err
+ }
+ return es.querier.Health(ctx)
}
// Push pushes the events in a single transaction
// an event needs at least an aggregate
func (es *Eventstore) Push(ctx context.Context, cmds ...Command) ([]Event, error) {
- events, constraints, err := commandsToRepository(authz.GetInstance(ctx).InstanceID(), cmds)
- if err != nil {
- return nil, err
- }
-
if es.PushTimeout > 0 {
var cancel func()
ctx, cancel = context.WithTimeout(ctx, es.PushTimeout)
defer cancel()
}
-
- err = es.repo.Push(ctx, events, constraints...)
+ events, err := es.pusher.Push(ctx, cmds...)
if err != nil {
return nil, err
}
- eventReaders, err := es.mapEvents(events)
+ mappedEvents, err := es.mapEvents(events)
if err != nil {
- return nil, err
+ return mappedEvents, err
}
-
- go notify(eventReaders)
- return eventReaders, nil
-}
-
-func (es *Eventstore) NewInstance(ctx context.Context, instanceID string) error {
- err := es.repo.CreateInstance(ctx, instanceID)
- if err != nil {
- return err
- }
-
- es.instancesMu.Lock()
- es.instances = append(es.instances, instanceID)
- es.instancesMu.Unlock()
-
- return nil
+ es.notify(mappedEvents)
+ return mappedEvents, nil
}
func (es *Eventstore) EventTypes() []string {
@@ -97,70 +81,15 @@ func (es *Eventstore) AggregateTypes() []string {
return es.aggregateTypes
}
-func commandsToRepository(instanceID string, cmds []Command) (events []*repository.Event, constraints []*repository.UniqueConstraint, err error) {
- events = make([]*repository.Event, len(cmds))
- for i, cmd := range cmds {
- data, err := EventData(cmd)
- if err != nil {
- return nil, nil, err
- }
- if cmd.Aggregate().ID == "" {
- return nil, nil, errors.ThrowInvalidArgument(nil, "V2-Afdfe", "aggregate id must not be empty")
- }
- if cmd.Aggregate().Type == "" {
- return nil, nil, errors.ThrowInvalidArgument(nil, "V2-Dfg32", "aggregate type must not be empty")
- }
- if cmd.Type() == "" {
- return nil, nil, errors.ThrowInvalidArgument(nil, "V2-Drg34", "event type must not be empty")
- }
- if cmd.Aggregate().Version == "" {
- return nil, nil, errors.ThrowInvalidArgument(nil, "V2-Dgfg4", "aggregate version must not be empty")
- }
- events[i] = &repository.Event{
- AggregateID: cmd.Aggregate().ID,
- AggregateType: repository.AggregateType(cmd.Aggregate().Type),
- ResourceOwner: sql.NullString{String: cmd.Aggregate().ResourceOwner, Valid: cmd.Aggregate().ResourceOwner != ""},
- InstanceID: instanceID,
- EditorService: cmd.EditorService(),
- EditorUser: cmd.EditorUser(),
- Type: repository.EventType(cmd.Type()),
- Version: repository.Version(cmd.Aggregate().Version),
- Data: data,
- }
- if len(cmd.UniqueConstraints()) > 0 {
- constraints = append(constraints, uniqueConstraintsToRepository(instanceID, cmd.UniqueConstraints())...)
- }
- }
-
- return events, constraints, nil
-}
-
-func uniqueConstraintsToRepository(instanceID string, constraints []*EventUniqueConstraint) (uniqueConstraints []*repository.UniqueConstraint) {
- uniqueConstraints = make([]*repository.UniqueConstraint, len(constraints))
- for i, constraint := range constraints {
- var id string
- if !constraint.IsGlobal {
- id = instanceID
- }
- uniqueConstraints[i] = &repository.UniqueConstraint{
- UniqueType: constraint.UniqueType,
- UniqueField: constraint.UniqueField,
- InstanceID: id,
- Action: uniqueConstraintActionToRepository(constraint.Action),
- ErrorMessage: constraint.ErrorMessage,
- }
- }
- return uniqueConstraints
-}
-
// Filter filters the stored events based on the searchQuery
// and maps the events to the defined event structs
func (es *Eventstore) Filter(ctx context.Context, queryFactory *SearchQueryBuilder) ([]Event, error) {
- query, err := queryFactory.build(authz.GetInstance(ctx).InstanceID())
- if err != nil {
- return nil, err
+ // make sure that the instance id is always set
+ if queryFactory.instanceID == nil && authz.GetInstance(ctx).InstanceID() != "" {
+ queryFactory.InstanceID(authz.GetInstance(ctx).InstanceID())
}
- events, err := es.repo.Filter(ctx, query)
+
+ events, err := es.querier.Filter(ctx, queryFactory)
if err != nil {
return nil, err
}
@@ -168,21 +97,14 @@ func (es *Eventstore) Filter(ctx context.Context, queryFactory *SearchQueryBuild
return es.mapEvents(events)
}
-func (es *Eventstore) mapEvents(events []*repository.Event) (mappedEvents []Event, err error) {
+func (es *Eventstore) mapEvents(events []Event) (mappedEvents []Event, err error) {
mappedEvents = make([]Event, len(events))
es.interceptorMutex.Lock()
defer es.interceptorMutex.Unlock()
for i, event := range events {
- interceptors, ok := es.eventInterceptors[EventType(event.Type)]
- if !ok || interceptors.eventMapper == nil {
- mappedEvents[i] = BaseEventFromRepo(event)
- //TODO: return error if unable to map event
- continue
- // return nil, errors.ThrowPreconditionFailed(nil, "V2-usujB", "event mapper not defined")
- }
- mappedEvents[i], err = interceptors.eventMapper(event)
+ mappedEvents[i], err = es.mapEvent(event)
if err != nil {
return nil, err
}
@@ -191,6 +113,14 @@ func (es *Eventstore) mapEvents(events []*repository.Event) (mappedEvents []Even
return mappedEvents, nil
}
+func (es *Eventstore) mapEvent(event Event) (Event, error) {
+ interceptors, ok := es.eventInterceptors[event.Type()]
+ if !ok || interceptors.eventMapper == nil {
+ return BaseEventFromRepo(event), nil
+ }
+ return interceptors.eventMapper(event)
+}
+
type reducer interface {
//Reduce handles the events of the internal events list
// it only appends the newly added events
@@ -212,12 +142,10 @@ func (es *Eventstore) FilterToReducer(ctx context.Context, searchQuery *SearchQu
}
// LatestSequence filters the latest sequence for the given search query
-func (es *Eventstore) LatestSequence(ctx context.Context, queryFactory *SearchQueryBuilder) (uint64, error) {
- query, err := queryFactory.build(authz.GetInstance(ctx).InstanceID())
- if err != nil {
- return 0, err
- }
- return es.repo.LatestSequence(ctx, query)
+func (es *Eventstore) LatestSequence(ctx context.Context, queryFactory *SearchQueryBuilder) (float64, error) {
+ queryFactory.InstanceID(authz.GetInstance(ctx).InstanceID())
+
+ return es.querier.LatestSequence(ctx, queryFactory)
}
// InstanceIDs returns the instance ids found by the search query
@@ -226,21 +154,18 @@ func (es *Eventstore) InstanceIDs(ctx context.Context, maxAge time.Duration, for
es.instancesMu.Lock()
defer es.instancesMu.Unlock()
- if !forceDBCall && time.Since(es.lastInstancesQuery) <= maxAge {
+ if !forceDBCall && time.Since(es.lastInstanceQuery) <= maxAge {
return es.instances, nil
}
- query, err := queryFactory.build(authz.GetInstance(ctx).InstanceID())
- if err != nil {
- return nil, err
- }
- instances, err := es.repo.InstanceIDs(ctx, query)
+ instances, err := es.querier.InstanceIDs(ctx, queryFactory)
if err != nil {
return nil, err
}
+
if !forceDBCall {
es.instances = instances
- es.lastInstancesQuery = time.Now()
+ es.lastInstanceQuery = time.Now()
}
return instances, nil
@@ -265,7 +190,7 @@ func (es *Eventstore) FilterToQueryReducer(ctx context.Context, r QueryReducer)
}
// RegisterFilterEventMapper registers a function for mapping an eventstore event to an event
-func (es *Eventstore) RegisterFilterEventMapper(aggregateType AggregateType, eventType EventType, mapper func(*repository.Event) (Event, error)) *Eventstore {
+func (es *Eventstore) RegisterFilterEventMapper(aggregateType AggregateType, eventType EventType, mapper func(Event) (Event, error)) *Eventstore {
if mapper == nil || eventType == "" {
return es
}
@@ -282,6 +207,24 @@ func (es *Eventstore) RegisterFilterEventMapper(aggregateType AggregateType, eve
return es
}
+type Querier interface {
+ // Health checks if the connection to the storage is available
+ Health(ctx context.Context) error
+ // Filter returns all events matching the given search query
+ Filter(ctx context.Context, searchQuery *SearchQueryBuilder) (events []Event, err error)
+ // LatestSequence returns the latest sequence found by the search query
+ LatestSequence(ctx context.Context, queryFactory *SearchQueryBuilder) (float64, error)
+ // InstanceIDs returns the instance ids found by the search query
+ InstanceIDs(ctx context.Context, queryFactory *SearchQueryBuilder) ([]string, error)
+}
+
+type Pusher interface {
+ // Health checks if the connection to the storage is available
+ Health(ctx context.Context) error
+ // Push stores the actions
+ Push(ctx context.Context, commands ...Command) (_ []Event, err error)
+}
+
func (es *Eventstore) appendEventType(typ EventType) {
i := sort.SearchStrings(es.eventTypes, string(typ))
if i < len(es.eventTypes) && es.eventTypes[i] == string(typ) {
@@ -297,61 +240,3 @@ func (es *Eventstore) appendAggregateType(typ AggregateType) {
}
es.aggregateTypes = append(es.aggregateTypes[:i], append([]string{string(typ)}, es.aggregateTypes[i:]...)...)
}
-
-func EventData(event Command) ([]byte, error) {
- switch data := event.Data().(type) {
- case nil:
- return nil, nil
- case []byte:
- if json.Valid(data) {
- return data, nil
- }
- return nil, errors.ThrowInvalidArgument(nil, "V2-6SbbS", "data bytes are not json")
- }
- dataType := reflect.TypeOf(event.Data())
- if dataType.Kind() == reflect.Ptr {
- dataType = dataType.Elem()
- }
- if dataType.Kind() == reflect.Struct {
- dataBytes, err := json.Marshal(event.Data())
- if err != nil {
- return nil, errors.ThrowInvalidArgument(err, "V2-xG87M", "could not marshal data")
- }
- return dataBytes, nil
- }
- return nil, errors.ThrowInvalidArgument(nil, "V2-91NRm", "wrong type of event data")
-}
-
-func uniqueConstraintActionToRepository(action UniqueConstraintAction) repository.UniqueConstraintAction {
- switch action {
- case UniqueConstraintAdd:
- return repository.UniqueConstraintAdd
- case UniqueConstraintRemove:
- return repository.UniqueConstraintRemoved
- case UniqueConstraintInstanceRemove:
- return repository.UniqueConstraintInstanceRemoved
- default:
- return repository.UniqueConstraintAdd
- }
-}
-
-type BaseEventSetter[T any] interface {
- Event
- SetBaseEvent(*BaseEvent)
- *T
-}
-
-func GenericEventMapper[T any, PT BaseEventSetter[T]](event *repository.Event) (Event, error) {
- e := PT(new(T))
- e.SetBaseEvent(BaseEventFromRepo(event))
-
- if len(event.Data) == 0 {
- return e, nil
- }
- err := json.Unmarshal(event.Data, e)
- if err != nil {
- return nil, errors.ThrowInternal(err, "V2-Thai6", "unable to unmarshal event")
- }
-
- return e, nil
-}
diff --git a/internal/eventstore/eventstore_bench_test.go b/internal/eventstore/eventstore_bench_test.go
new file mode 100644
index 0000000000..69b958abd8
--- /dev/null
+++ b/internal/eventstore/eventstore_bench_test.go
@@ -0,0 +1,162 @@
+package eventstore_test
+
+import (
+ "context"
+ _ "embed"
+ "fmt"
+ "strconv"
+ "testing"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+//go:embed bench_payload.txt
+var text string
+
+func Benchmark_Push_SameAggregate(b *testing.B) {
+ ctx := context.Background()
+
+ smallPayload := struct {
+ Username string
+ Firstname string
+ Lastname string
+ }{
+ Username: "username",
+ Firstname: "firstname",
+ Lastname: "lastname",
+ }
+
+ bigPayload := struct {
+ Username string
+ Firstname string
+ Lastname string
+ Text string
+ }{
+ Username: "username",
+ Firstname: "firstname",
+ Lastname: "lastname",
+ Text: text,
+ }
+
+ commands := map[string][]eventstore.Command{
+ "no payload one command": {
+ generateCommand(eventstore.AggregateType(b.Name()), "id"),
+ },
+ "small payload one command": {
+ generateCommand(eventstore.AggregateType(b.Name()), "id", withTestData(smallPayload)),
+ },
+ "big payload one command": {
+ generateCommand(eventstore.AggregateType(b.Name()), "id", withTestData(bigPayload)),
+ },
+ "no payload multiple commands": {
+ generateCommand(eventstore.AggregateType(b.Name()), "id"),
+ generateCommand(eventstore.AggregateType(b.Name()), "id"),
+ generateCommand(eventstore.AggregateType(b.Name()), "id"),
+ },
+ "mixed payload multiple command": {
+ generateCommand(eventstore.AggregateType(b.Name()), "id", withTestData(smallPayload)),
+ generateCommand(eventstore.AggregateType(b.Name()), "id", withTestData(bigPayload)),
+ generateCommand(eventstore.AggregateType(b.Name()), "id", withTestData(smallPayload)),
+ generateCommand(eventstore.AggregateType(b.Name()), "id", withTestData(bigPayload)),
+ },
+ }
+
+ for cmdsKey, cmds := range commands {
+ for pusherKey, store := range pushers {
+ b.Run(fmt.Sprintf("Benchmark_Push_SameAggregate-%s-%s", pusherKey, cmdsKey), func(b *testing.B) {
+ b.StopTimer()
+ cleanupEventstore(clients[pusherKey])
+ b.StartTimer()
+
+ for n := 0; n < b.N; n++ {
+ _, err := store.Push(ctx, cmds...)
+ if err != nil {
+ b.Error(err)
+ }
+ }
+ })
+ }
+ }
+}
+
+func Benchmark_Push_MultipleAggregate_Parallel(b *testing.B) {
+ smallPayload := struct {
+ Username string
+ Firstname string
+ Lastname string
+ }{
+ Username: "username",
+ Firstname: "firstname",
+ Lastname: "lastname",
+ }
+
+ bigPayload := struct {
+ Username string
+ Firstname string
+ Lastname string
+ Text string
+ }{
+ Username: "username",
+ Firstname: "firstname",
+ Lastname: "lastname",
+ Text: text,
+ }
+
+ commandCreators := map[string]func(id string) []eventstore.Command{
+ "no payload one command": func(id string) []eventstore.Command {
+ return []eventstore.Command{
+ generateCommand(eventstore.AggregateType(b.Name()), id),
+ }
+ },
+ "small payload one command": func(id string) []eventstore.Command {
+ return []eventstore.Command{
+ generateCommand(eventstore.AggregateType(b.Name()), id, withTestData(smallPayload)),
+ }
+ },
+ "big payload one command": func(id string) []eventstore.Command {
+ return []eventstore.Command{
+ generateCommand(eventstore.AggregateType(b.Name()), id, withTestData(bigPayload)),
+ }
+ },
+ "no payload multiple commands": func(id string) []eventstore.Command {
+ return []eventstore.Command{
+ generateCommand(eventstore.AggregateType(b.Name()), id),
+ generateCommand(eventstore.AggregateType(b.Name()), id),
+ generateCommand(eventstore.AggregateType(b.Name()), id),
+ }
+ },
+ "mixed payload multiple command": func(id string) []eventstore.Command {
+ return []eventstore.Command{
+ generateCommand(eventstore.AggregateType(b.Name()), id, withTestData(smallPayload)),
+ generateCommand(eventstore.AggregateType(b.Name()), id, withTestData(bigPayload)),
+ generateCommand(eventstore.AggregateType(b.Name()), id, withTestData(smallPayload)),
+ generateCommand(eventstore.AggregateType(b.Name()), id, withTestData(bigPayload)),
+ }
+ },
+ }
+
+ for cmdsKey, commandCreator := range commandCreators {
+ for pusherKey, store := range pushers {
+ b.Run(fmt.Sprintf("Benchmark_Push_DifferentAggregate-%s-%s", cmdsKey, pusherKey), func(b *testing.B) {
+ b.StopTimer()
+ cleanupEventstore(clients[pusherKey])
+
+ ctx, cancel := context.WithCancel(context.Background())
+ b.StartTimer()
+
+ i := 0
+
+ b.RunParallel(func(p *testing.PB) {
+ for p.Next() {
+ i++
+ _, err := store.Push(ctx, commandCreator(strconv.Itoa(i))...)
+ if err != nil {
+ b.Error(err)
+ }
+ }
+ })
+ cancel()
+ })
+ }
+ }
+}
diff --git a/internal/eventstore/eventstore_pusher_test.go b/internal/eventstore/eventstore_pusher_test.go
new file mode 100644
index 0000000000..cbd1a72e34
--- /dev/null
+++ b/internal/eventstore/eventstore_pusher_test.go
@@ -0,0 +1,712 @@
+package eventstore_test
+
+import (
+ "context"
+ "database/sql"
+ "sync"
+ "testing"
+ "time"
+
+ "github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+func TestCRDB_Push_OneAggregate(t *testing.T) {
+ type args struct {
+ ctx context.Context
+ commands []eventstore.Command
+ uniqueDataType string
+ uniqueDataField string
+ uniqueDataInstanceID string
+ }
+ type eventsRes struct {
+ pushedEventsCount int
+ uniqueCount int
+ assetCount int
+ aggType eventstore.AggregateType
+ aggIDs database.TextArray[string]
+ }
+ type res struct {
+ wantErr bool
+ eventsRes eventsRes
+ }
+ tests := []struct {
+ name string
+ args args
+ res res
+ }{
+ {
+ name: "push 1 event",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "1"),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 1,
+ aggIDs: []string{"1"},
+ aggType: eventstore.AggregateType(t.Name()),
+ }},
+ },
+ {
+ name: "push two events on agg",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "6"),
+ generateCommand(eventstore.AggregateType(t.Name()), "6"),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 2,
+ aggIDs: []string{"6"},
+ aggType: eventstore.AggregateType(t.Name()),
+ },
+ },
+ },
+ {
+ name: "failed push because context canceled",
+ args: args{
+ ctx: canceledCtx(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "9"),
+ },
+ },
+ res: res{
+ wantErr: true,
+ eventsRes: eventsRes{
+ pushedEventsCount: 0,
+ aggIDs: []string{"9"},
+ aggType: eventstore.AggregateType(t.Name()),
+ },
+ },
+ },
+ {
+ name: "push 1 event and add unique constraint",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "10",
+ generateAddUniqueConstraint("usernames", "field"),
+ ),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 1,
+ uniqueCount: 1,
+ aggIDs: []string{"10"},
+ aggType: eventstore.AggregateType(t.Name()),
+ }},
+ },
+ {
+ name: "push 1 event and remove unique constraint",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "11",
+ generateRemoveUniqueConstraint("usernames", "testremove"),
+ ),
+ },
+ uniqueDataType: "usernames",
+ uniqueDataField: "testremove",
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 1,
+ uniqueCount: 0,
+ aggIDs: []string{"11"},
+ aggType: eventstore.AggregateType(t.Name()),
+ }},
+ },
+ {
+ name: "push 1 event and remove instance unique constraints",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "12",
+ generateRemoveUniqueConstraint("instance", "instanceID"),
+ ),
+ },
+ uniqueDataType: "usernames",
+ uniqueDataField: "testremove",
+ uniqueDataInstanceID: "instanceID",
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 1,
+ uniqueCount: 0,
+ aggIDs: []string{"12"},
+ aggType: eventstore.AggregateType(t.Name()),
+ }},
+ },
+ {
+ name: "push 1 event and add asset",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "13"),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 1,
+ assetCount: 1,
+ aggIDs: []string{"13"},
+ aggType: eventstore.AggregateType(t.Name()),
+ }},
+ },
+ {
+ name: "push 1 event and remove asset",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "14"),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 1,
+ assetCount: 0,
+ aggIDs: []string{"14"},
+ aggType: eventstore.AggregateType(t.Name()),
+ }},
+ },
+ }
+ for _, tt := range tests {
+ for pusherName, pusher := range pushers {
+ t.Run(pusherName+"/"+tt.name, func(t *testing.T) {
+ t.Cleanup(cleanupEventstore(clients[pusherName]))
+ db := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: queriers["v2(inmemory)"],
+ Pusher: pusher,
+ },
+ )
+
+ if tt.args.uniqueDataType != "" && tt.args.uniqueDataField != "" {
+ err := fillUniqueData(tt.args.uniqueDataType, tt.args.uniqueDataField, tt.args.uniqueDataInstanceID)
+ if err != nil {
+ t.Error("unable to prefill insert unique data: ", err)
+ return
+ }
+ }
+ if _, err := db.Push(tt.args.ctx, tt.args.commands...); (err != nil) != tt.res.wantErr {
+ t.Errorf("CRDB.Push() error = %v, wantErr %v", err, tt.res.wantErr)
+ }
+
+ assertEventCount(t,
+ clients[pusherName],
+ database.TextArray[eventstore.AggregateType]{tt.res.eventsRes.aggType},
+ tt.res.eventsRes.aggIDs,
+ tt.res.eventsRes.pushedEventsCount,
+ )
+
+ assertUniqueConstraint(t, clients[pusherName], tt.args.commands, tt.res.eventsRes.uniqueCount)
+ })
+ }
+ }
+}
+
+func TestCRDB_Push_MultipleAggregate(t *testing.T) {
+ type args struct {
+ commands []eventstore.Command
+ }
+ type eventsRes struct {
+ pushedEventsCount int
+ aggType database.TextArray[eventstore.AggregateType]
+ aggID database.TextArray[string]
+ }
+ type res struct {
+ wantErr bool
+ eventsRes eventsRes
+ }
+ tests := []struct {
+ name string
+ args args
+ res res
+ }{
+ {
+ name: "push two aggregates",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "100"),
+ generateCommand(eventstore.AggregateType(t.Name()), "101"),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 2,
+ aggID: []string{"100", "101"},
+ aggType: database.TextArray[eventstore.AggregateType]{eventstore.AggregateType(t.Name())},
+ },
+ },
+ },
+ {
+ name: "push two aggregates both multiple events",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "102"),
+ generateCommand(eventstore.AggregateType(t.Name()), "102"),
+ generateCommand(eventstore.AggregateType(t.Name()), "103"),
+ generateCommand(eventstore.AggregateType(t.Name()), "103"),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 4,
+ aggID: []string{"102", "103"},
+ aggType: database.TextArray[eventstore.AggregateType]{eventstore.AggregateType(t.Name())},
+ },
+ },
+ },
+ {
+ name: "push two aggregates mixed multiple events",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "106"),
+ generateCommand(eventstore.AggregateType(t.Name()), "106"),
+ generateCommand(eventstore.AggregateType(t.Name()), "106"),
+ generateCommand(eventstore.AggregateType(t.Name()), "106"),
+ generateCommand(eventstore.AggregateType(t.Name()), "107"),
+ generateCommand(eventstore.AggregateType(t.Name()), "107"),
+ generateCommand(eventstore.AggregateType(t.Name()), "107"),
+ generateCommand(eventstore.AggregateType(t.Name()), "107"),
+ generateCommand(eventstore.AggregateType(t.Name()), "108"),
+ generateCommand(eventstore.AggregateType(t.Name()), "108"),
+ generateCommand(eventstore.AggregateType(t.Name()), "108"),
+ generateCommand(eventstore.AggregateType(t.Name()), "108"),
+ },
+ },
+ res: res{
+ wantErr: false,
+ eventsRes: eventsRes{
+ pushedEventsCount: 12,
+ aggID: []string{"106", "107", "108"},
+ aggType: database.TextArray[eventstore.AggregateType]{eventstore.AggregateType(t.Name())},
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ for pusherName, pusher := range pushers {
+ t.Run(pusherName+"/"+tt.name, func(t *testing.T) {
+ t.Cleanup(cleanupEventstore(clients[pusherName]))
+
+ db := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: queriers["v2(inmemory)"],
+ Pusher: pusher,
+ },
+ )
+ if _, err := db.Push(context.Background(), tt.args.commands...); (err != nil) != tt.res.wantErr {
+ t.Errorf("CRDB.Push() error = %v, wantErr %v", err, tt.res.wantErr)
+ }
+
+ assertEventCount(t, clients[pusherName], tt.res.eventsRes.aggType, tt.res.eventsRes.aggID, tt.res.eventsRes.pushedEventsCount)
+ })
+ }
+ }
+}
+
+func TestCRDB_Push_Parallel(t *testing.T) {
+ type args struct {
+ commands [][]eventstore.Command
+ }
+ type eventsRes struct {
+ pushedEventsCount int
+ aggTypes database.TextArray[eventstore.AggregateType]
+ aggIDs database.TextArray[string]
+ }
+ type res struct {
+ minErrCount int
+ eventsRes eventsRes
+ }
+ tests := []struct {
+ name string
+ args args
+ res res
+ }{
+ {
+ name: "clients push different aggregates",
+ args: args{
+ commands: [][]eventstore.Command{
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "200"),
+ generateCommand(eventstore.AggregateType(t.Name()), "200"),
+ generateCommand(eventstore.AggregateType(t.Name()), "200"),
+ generateCommand(eventstore.AggregateType(t.Name()), "201"),
+ generateCommand(eventstore.AggregateType(t.Name()), "201"),
+ generateCommand(eventstore.AggregateType(t.Name()), "201"),
+ },
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "202"),
+ generateCommand(eventstore.AggregateType(t.Name()), "203"),
+ generateCommand(eventstore.AggregateType(t.Name()), "203"),
+ },
+ },
+ },
+ res: res{
+ minErrCount: 0,
+ eventsRes: eventsRes{
+ aggIDs: []string{"200", "201", "202", "203"},
+ pushedEventsCount: 9,
+ aggTypes: database.TextArray[eventstore.AggregateType]{eventstore.AggregateType(t.Name())},
+ },
+ },
+ },
+ {
+ name: "clients push same aggregates",
+ args: args{
+ commands: [][]eventstore.Command{
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ },
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ },
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ },
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ generateCommand(eventstore.AggregateType(t.Name()), "204"),
+ },
+ },
+ },
+ res: res{
+ minErrCount: 1,
+ eventsRes: eventsRes{
+ aggIDs: []string{"204"},
+ pushedEventsCount: 6,
+ aggTypes: database.TextArray[eventstore.AggregateType]{eventstore.AggregateType(t.Name())},
+ },
+ },
+ },
+ {
+ name: "clients push different aggregates",
+ args: args{
+ commands: [][]eventstore.Command{
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "207"),
+ generateCommand(eventstore.AggregateType(t.Name()), "207"),
+ generateCommand(eventstore.AggregateType(t.Name()), "207"),
+ generateCommand(eventstore.AggregateType(t.Name()), "207"),
+ generateCommand(eventstore.AggregateType(t.Name()), "207"),
+ generateCommand(eventstore.AggregateType(t.Name()), "207"),
+ },
+ {
+ generateCommand(eventstore.AggregateType(t.Name()), "208"),
+ generateCommand(eventstore.AggregateType(t.Name()), "208"),
+ generateCommand(eventstore.AggregateType(t.Name()), "208"),
+ generateCommand(eventstore.AggregateType(t.Name()), "208"),
+ generateCommand(eventstore.AggregateType(t.Name()), "208"),
+ },
+ },
+ },
+ res: res{
+ minErrCount: 0,
+ eventsRes: eventsRes{
+ aggIDs: []string{"207", "208"},
+ pushedEventsCount: 11,
+ aggTypes: database.TextArray[eventstore.AggregateType]{eventstore.AggregateType(t.Name())},
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ for pusherName, pusher := range pushers {
+ t.Run(pusherName+"/"+tt.name, func(t *testing.T) {
+ t.Cleanup(cleanupEventstore(clients[pusherName]))
+
+ db := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: queriers["v2(inmemory)"],
+ Pusher: pusher,
+ },
+ )
+
+ errs := pushAggregates(db, tt.args.commands)
+
+ if len(errs) < tt.res.minErrCount {
+ t.Errorf("eventstore.Push() error count = %d, wanted err count %d, errs: %v", len(errs), tt.res.minErrCount, errs)
+ }
+
+ assertEventCount(t, clients[pusherName], tt.res.eventsRes.aggTypes, tt.res.eventsRes.aggIDs, tt.res.eventsRes.pushedEventsCount)
+ })
+ }
+ }
+}
+
+func TestCRDB_Push_ResourceOwner(t *testing.T) {
+ type args struct {
+ commands []eventstore.Command
+ }
+ type res struct {
+ resourceOwners database.TextArray[string]
+ }
+ type fields struct {
+ aggregateIDs database.TextArray[string]
+ aggregateType string
+ }
+ tests := []struct {
+ name string
+ args args
+ res res
+ fields fields
+ }{
+ {
+ name: "two events of same aggregate same resource owner",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "500", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "500", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ },
+ },
+ fields: fields{
+ aggregateIDs: []string{"500"},
+ aggregateType: t.Name(),
+ },
+ res: res{
+ resourceOwners: []string{"caos", "caos"},
+ },
+ },
+ {
+ name: "two events of different aggregate same resource owner",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "501", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "502", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ },
+ },
+ fields: fields{
+ aggregateIDs: []string{"501", "502"},
+ aggregateType: t.Name(),
+ },
+ res: res{
+ resourceOwners: []string{"caos", "caos"},
+ },
+ },
+ {
+ name: "two events of different aggregate different resource owner",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "503", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "504", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "zitadel" }),
+ },
+ },
+ fields: fields{
+ aggregateIDs: []string{"503", "504"},
+ aggregateType: t.Name(),
+ },
+ res: res{
+ resourceOwners: []string{"caos", "zitadel"},
+ },
+ },
+ {
+ name: "events of different aggregate different resource owner",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "505", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "505", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "506", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "zitadel" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "506", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "zitadel" }),
+ },
+ },
+ fields: fields{
+ aggregateIDs: []string{"505", "506"},
+ aggregateType: t.Name(),
+ },
+ res: res{
+ resourceOwners: []string{"caos", "caos", "zitadel", "zitadel"},
+ },
+ },
+ {
+ name: "events of different aggregate different resource owner per event",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "507", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "507", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "ignored" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "508", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "zitadel" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "508", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "ignored" }),
+ },
+ },
+ fields: fields{
+ aggregateIDs: []string{"507", "508"},
+ aggregateType: t.Name(),
+ },
+ res: res{
+ resourceOwners: []string{"caos", "caos", "zitadel", "zitadel"},
+ },
+ },
+ {
+ name: "events of one aggregate different resource owner per event",
+ args: args{
+ commands: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "509", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "caos" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "509", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "ignored" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "509", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "ignored" }),
+ generateCommand(eventstore.AggregateType(t.Name()), "509", func(e *testEvent) { e.BaseEvent.Agg.ResourceOwner = "ignored" }),
+ },
+ },
+ fields: fields{
+ aggregateIDs: []string{"509"},
+ aggregateType: t.Name(),
+ },
+ res: res{
+ resourceOwners: []string{"caos", "caos", "caos", "caos"},
+ },
+ },
+ }
+ for _, tt := range tests {
+ for pusherName, pusher := range pushers {
+ t.Run(pusherName+"/"+tt.name, func(t *testing.T) {
+ t.Cleanup(cleanupEventstore(clients[pusherName]))
+
+ db := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: queriers["v2(inmemory)"],
+ Pusher: pusher,
+ },
+ )
+
+ events, err := db.Push(context.Background(), tt.args.commands...)
+ if err != nil {
+ t.Errorf("CRDB.Push() error = %v", err)
+ }
+
+ if len(events) != len(tt.res.resourceOwners) {
+ t.Errorf("length of events (%d) and resource owners (%d) must be equal", len(events), len(tt.res.resourceOwners))
+ return
+ }
+
+ for i, event := range events {
+ if event.Aggregate().ResourceOwner != tt.res.resourceOwners[i] {
+ t.Errorf("resource owner not expected want: %q got: %q", tt.res.resourceOwners[i], event.Aggregate().ResourceOwner)
+ }
+ }
+
+ assertResourceOwners(t, clients[pusherName], tt.res.resourceOwners, tt.fields.aggregateIDs, tt.fields.aggregateType)
+ })
+ }
+ }
+}
+
+func pushAggregates(pusher eventstore.Pusher, aggregateCommands [][]eventstore.Command) []error {
+ wg := sync.WaitGroup{}
+ errs := make([]error, 0)
+ errsMu := sync.Mutex{}
+ wg.Add(len(aggregateCommands))
+
+ ctx, cancel := context.WithCancel(context.Background())
+
+ for _, commands := range aggregateCommands {
+ go func(events []eventstore.Command) {
+ <-ctx.Done()
+
+ _, err := pusher.Push(context.Background(), events...) //nolint:contextcheck
+ if err != nil {
+ errsMu.Lock()
+ errs = append(errs, err)
+ errsMu.Unlock()
+ }
+
+ wg.Done()
+ }(commands)
+ }
+
+ // wait till all routines are started
+ time.Sleep(100 * time.Millisecond)
+ cancel()
+ wg.Wait()
+
+ return errs
+}
+
+func assertResourceOwners(t *testing.T, db *database.DB, resourceOwners, aggregateIDs database.TextArray[string], aggregateType string) {
+ t.Helper()
+
+ eventCount := 0
+ err := db.Query(func(rows *sql.Rows) error {
+ for i := 0; rows.Next(); i++ {
+ var resourceOwner string
+ err := rows.Scan(&resourceOwner)
+ if err != nil {
+ return err
+ }
+ if resourceOwner != resourceOwners[i] {
+ t.Errorf("unexpected resource owner in queried event. want %q, got: %q", resourceOwners[i], resourceOwner)
+ }
+ eventCount++
+ }
+ return nil
+ }, "SELECT owner FROM eventstore.events2 WHERE aggregate_type = $1 AND aggregate_id = ANY($2) ORDER BY position, in_tx_order", aggregateType, aggregateIDs)
+ if err != nil {
+ t.Error("query failed: ", err)
+ return
+ }
+
+ if eventCount != len(resourceOwners) {
+ t.Errorf("wrong queried event count: want %d, got %d", len(resourceOwners), eventCount)
+ }
+}
+
+func assertEventCount(t *testing.T, db *database.DB, aggTypes database.TextArray[eventstore.AggregateType], aggIDs database.TextArray[string], maxPushedEventsCount int) {
+ t.Helper()
+
+ var count int
+ err := db.QueryRow(func(row *sql.Row) error {
+ return row.Scan(&count)
+ }, "SELECT count(*) FROM eventstore.events2 where aggregate_type = ANY($1) AND aggregate_id = ANY($2)", aggTypes, aggIDs)
+
+ if err != nil {
+ t.Errorf("unexpected err in row.Scan: %v", err)
+ return
+ }
+
+ if count > maxPushedEventsCount {
+ t.Errorf("expected push count %d got %d", maxPushedEventsCount, count)
+ }
+}
+
+func assertUniqueConstraint(t *testing.T, db *database.DB, commands []eventstore.Command, expectedCount int) {
+ t.Helper()
+
+ var uniqueConstraint *eventstore.UniqueConstraint
+ for _, command := range commands {
+ if e := command.(*testEvent); len(e.uniqueConstraints) > 0 {
+ uniqueConstraint = e.uniqueConstraints[0]
+ break
+ }
+ }
+ if uniqueConstraint == nil {
+ return
+ }
+
+ var uniqueCount int
+ err := db.QueryRow(func(row *sql.Row) error {
+ return row.Scan(&uniqueCount)
+ }, "SELECT COUNT(*) FROM eventstore.unique_constraints where unique_type = $1 AND unique_field = $2", uniqueConstraint.UniqueType, uniqueConstraint.UniqueField)
+ if err != nil {
+ t.Error("unable to query inserted rows: ", err)
+ return
+ }
+ if uniqueCount != expectedCount {
+ t.Errorf("expected unique count %d got %d", expectedCount, uniqueCount)
+ }
+}
diff --git a/internal/eventstore/eventstore_querier_test.go b/internal/eventstore/eventstore_querier_test.go
new file mode 100644
index 0000000000..856bb4a20e
--- /dev/null
+++ b/internal/eventstore/eventstore_querier_test.go
@@ -0,0 +1,182 @@
+package eventstore_test
+
+import (
+ "context"
+ "testing"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+func TestCRDB_Filter(t *testing.T) {
+ type args struct {
+ searchQuery *eventstore.SearchQueryBuilder
+ }
+ type fields struct {
+ existingEvents []eventstore.Command
+ }
+ type res struct {
+ eventCount int
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ res res
+ wantErr bool
+ }{
+ {
+ name: "aggregate type filter no events",
+ args: args{
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AddQuery().
+ AggregateTypes("not found").
+ Builder(),
+ },
+ fields: fields{
+ existingEvents: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "300"),
+ generateCommand(eventstore.AggregateType(t.Name()), "300"),
+ generateCommand(eventstore.AggregateType(t.Name()), "300"),
+ },
+ },
+ res: res{
+ eventCount: 0,
+ },
+ wantErr: false,
+ },
+ {
+ name: "aggregate type and id filter events found",
+ args: args{
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AddQuery().
+ AggregateTypes(eventstore.AggregateType(t.Name())).
+ AggregateIDs("303").
+ Builder(),
+ },
+ fields: fields{
+ existingEvents: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "303"),
+ generateCommand(eventstore.AggregateType(t.Name()), "303"),
+ generateCommand(eventstore.AggregateType(t.Name()), "303"),
+ generateCommand(eventstore.AggregateType(t.Name()), "305"),
+ },
+ },
+ res: res{
+ eventCount: 3,
+ },
+ wantErr: false,
+ },
+ }
+ for _, tt := range tests {
+ for querierName, querier := range queriers {
+ t.Run(querierName+"/"+tt.name, func(t *testing.T) {
+ t.Cleanup(cleanupEventstore(clients[querierName]))
+
+ db := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: querier,
+ Pusher: pushers["v3(inmemory)"],
+ },
+ )
+
+ // setup initial data for query
+ if _, err := db.Push(context.Background(), tt.fields.existingEvents...); err != nil {
+ t.Errorf("error in setup = %v", err)
+ return
+ }
+
+ events, err := db.Filter(context.Background(), tt.args.searchQuery)
+ if (err != nil) != tt.wantErr {
+ t.Errorf("CRDB.query() error = %v, wantErr %v", err, tt.wantErr)
+ }
+
+ if len(events) != tt.res.eventCount {
+ t.Errorf("CRDB.query() expected event count: %d got %d", tt.res.eventCount, len(events))
+ }
+ })
+ }
+ }
+}
+
+func TestCRDB_LatestSequence(t *testing.T) {
+ type args struct {
+ searchQuery *eventstore.SearchQueryBuilder
+ }
+ type fields struct {
+ existingEvents []eventstore.Command
+ }
+ type res struct {
+ sequence float64
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ res res
+ wantErr bool
+ }{
+ {
+ name: "aggregate type filter no sequence",
+ args: args{
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsMaxSequence).
+ AddQuery().
+ AggregateTypes("not found").
+ Builder(),
+ },
+ fields: fields{
+ existingEvents: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "400"),
+ generateCommand(eventstore.AggregateType(t.Name()), "400"),
+ generateCommand(eventstore.AggregateType(t.Name()), "400"),
+ },
+ },
+ wantErr: false,
+ },
+ {
+ name: "aggregate type filter sequence",
+ args: args{
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsMaxSequence).
+ AddQuery().
+ AggregateTypes(eventstore.AggregateType(t.Name())).
+ Builder(),
+ },
+ fields: fields{
+ existingEvents: []eventstore.Command{
+ generateCommand(eventstore.AggregateType(t.Name()), "401"),
+ generateCommand(eventstore.AggregateType(t.Name()), "401"),
+ generateCommand(eventstore.AggregateType(t.Name()), "401"),
+ },
+ },
+ wantErr: false,
+ },
+ }
+ for _, tt := range tests {
+ for querierName, querier := range queriers {
+ t.Run(querierName+"/"+tt.name, func(t *testing.T) {
+ t.Cleanup(cleanupEventstore(clients[querierName]))
+
+ db := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: querier,
+ Pusher: pushers["v3(inmemory)"],
+ },
+ )
+
+ // setup initial data for query
+ _, err := db.Push(context.Background(), tt.fields.existingEvents...)
+ if err != nil {
+ t.Errorf("error in setup = %v", err)
+ return
+ }
+
+ sequence, err := db.LatestSequence(context.Background(), tt.args.searchQuery)
+ if (err != nil) != tt.wantErr {
+ t.Errorf("CRDB.query() error = %v, wantErr %v", err, tt.wantErr)
+ }
+ if tt.res.sequence > sequence {
+ t.Errorf("CRDB.query() expected sequence: %v got %v", tt.res.sequence, sequence)
+ }
+ })
+ }
+ }
+}
diff --git a/internal/eventstore/eventstore_test.go b/internal/eventstore/eventstore_test.go
index e9054696ed..8738a47afc 100644
--- a/internal/eventstore/eventstore_test.go
+++ b/internal/eventstore/eventstore_test.go
@@ -2,16 +2,16 @@ package eventstore
import (
"context"
- "database/sql"
+ "encoding/json"
"fmt"
"reflect"
"sync"
"testing"
+ "time"
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/service"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
// testEvent implements the Event interface
@@ -36,11 +36,11 @@ func newTestEvent(id, description string, data func() interface{}, checkPrevious
}
}
-func (e *testEvent) Data() interface{} {
+func (e *testEvent) Payload() interface{} {
return e.data()
}
-func (e *testEvent) UniqueConstraints() []*EventUniqueConstraint {
+func (e *testEvent) UniqueConstraints() []*UniqueConstraint {
return nil
}
@@ -48,7 +48,7 @@ func (e *testEvent) Assets() []*Asset {
return nil
}
-func testFilterMapper(event *repository.Event) (Event, error) {
+func testFilterMapper(event Event) (Event, error) {
if event == nil {
return newTestEvent("testID", "hodor", nil, false), nil
}
@@ -61,7 +61,7 @@ func Test_eventstore_RegisterFilterEventMapper(t *testing.T) {
}
type args struct {
eventType EventType
- mapper func(*repository.Event) (Event, error)
+ mapper func(Event) (Event, error)
}
type res struct {
event Event
@@ -74,19 +74,6 @@ func Test_eventstore_RegisterFilterEventMapper(t *testing.T) {
args args
res res
}{
- {
- name: "no event type",
- args: args{
- eventType: "",
- mapper: testFilterMapper,
- },
- fields: fields{
- eventMapper: map[EventType]eventTypeInterceptors{},
- },
- res: res{
- mapperCount: 0,
- },
- },
{
name: "no event mapper",
args: args{
@@ -135,7 +122,7 @@ func Test_eventstore_RegisterFilterEventMapper(t *testing.T) {
fields: fields{
eventMapper: map[EventType]eventTypeInterceptors{
"event.type": {
- eventMapper: func(*repository.Event) (Event, error) {
+ eventMapper: func(Event) (Event, error) {
return nil, errors.ThrowUnimplemented(nil, "V2-1qPvn", "unimplemented")
},
},
@@ -342,401 +329,94 @@ func Test_eventData(t *testing.T) {
}
}
-func TestEventstore_aggregatesToEvents(t *testing.T) {
- type args struct {
- instanceID string
- events []Command
- }
- type res struct {
- wantErr bool
- events []*repository.Event
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "one aggregate one event",
- args: args{
- instanceID: "instanceID",
- events: []Command{
- newTestEvent(
- "1",
- "",
- func() interface{} {
- return nil
- },
- false),
- },
- },
- res: res{
- wantErr: false,
- events: []*repository.Event{
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "instanceID",
- Type: "test.event",
- Version: "v1",
- },
- },
- },
- },
- {
- name: "one aggregate multiple events",
- args: args{
- instanceID: "instanceID",
- events: []Command{
- newTestEvent(
- "1",
- "",
- func() interface{} {
- return nil
- },
- false),
- newTestEvent(
- "1",
- "",
- func() interface{} {
- return nil
- },
- false),
- },
- },
- res: res{
- wantErr: false,
- events: []*repository.Event{
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "instanceID",
- Type: "test.event",
- Version: "v1",
- },
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "instanceID",
- Type: "test.event",
- Version: "v1",
- },
- },
- },
- },
- {
- name: "invalid data",
- args: args{
- instanceID: "instanceID",
- events: []Command{
- newTestEvent(
- "1",
- "",
- func() interface{} {
- return `{"data":""`
- },
- false),
- },
- },
- res: res{
- wantErr: true,
- },
- },
- {
- name: "no aggregate id",
- args: args{
- events: []Command{
- &testEvent{
- BaseEvent: *NewBaseEventForPush(
- service.WithService(authz.NewMockContext("instanceID", "resourceOwner", "editorUser"), "editorService"),
- NewAggregate(
- authz.NewMockContext("zitadel", "caos", "adlerhurst"),
- "",
- "test.aggregate",
- "v1",
- ),
- "test.event",
- ),
- data: func() interface{} {
- return nil
- },
- },
- },
- },
- res: res{
- wantErr: true,
- },
- },
- {
- name: "no aggregate type",
- args: args{
- events: []Command{
- &testEvent{
- BaseEvent: *NewBaseEventForPush(
- service.WithService(authz.NewMockContext("instanceID", "resourceOwner", "editorUser"), "editorService"),
- NewAggregate(
- authz.NewMockContext("zitadel", "caos", "adlerhurst"),
- "id",
- "",
- "v1",
- ),
- "test.event",
- ),
- data: func() interface{} {
- return nil
- },
- },
- },
- },
- res: res{
- wantErr: true,
- },
- },
- {
- name: "no aggregate version",
- args: args{
- events: []Command{
- &testEvent{
- BaseEvent: *NewBaseEventForPush(
- service.WithService(authz.NewMockContext("instanceID", "resourceOwner", "editorUser"), "editorService"),
- NewAggregate(
- authz.NewMockContext("zitadel", "caos", "adlerhurst"),
- "id",
- "test.aggregate",
- "",
- ),
- "test.event",
- ),
- data: func() interface{} {
- return nil
- },
- },
- },
- },
- res: res{
- wantErr: true,
- },
- },
- {
- name: "no event type",
- args: args{
- events: []Command{
- &testEvent{
- BaseEvent: *NewBaseEventForPush(
- service.WithService(authz.NewMockContext("instanceID", "resourceOwner", "editorUser"), "editorService"),
- NewAggregate(
- authz.NewMockContext("zitadel", "caos", "adlerhurst"),
- "id",
- "test.aggregate",
- "v1",
- ),
- "",
- ),
- data: func() interface{} {
- return nil
- },
- },
- },
- },
- res: res{
- wantErr: true,
- },
- },
- {
- name: "no resourceowner",
- args: args{
- events: []Command{
- &testEvent{
- BaseEvent: *NewBaseEventForPush(
- service.WithService(authz.NewMockContext("instanceID", "", "editorUser"), "editorService"),
- NewAggregate(
- authz.NewMockContext("zitadel", "", "adlerhurst"),
- "id",
- "test.aggregate",
- "v1",
- ),
- "test.event",
- ),
- data: func() interface{} {
- return nil
- },
- },
- },
- },
- res: res{
- wantErr: false,
- events: []*repository.Event{
- {
- AggregateID: "id",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "", Valid: false},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
- },
- },
- },
- },
- {
- name: "multiple aggregates",
- args: args{
- events: []Command{
- newTestEvent(
- "1",
- "",
- func() interface{} {
- return nil
- },
- false),
- newTestEvent(
- "1",
- "",
- func() interface{} {
- return nil
- },
- false),
- newTestEvent(
- "2",
- "",
- func() interface{} {
- return nil
- },
- true),
- },
- },
- res: res{
- wantErr: false,
- events: combineEventLists(
- []*repository.Event{
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
- },
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
- },
- },
- []*repository.Event{
- {
- AggregateID: "2",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
- },
- },
- ),
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- events, _, err := commandsToRepository(tt.args.instanceID, tt.args.events)
- if (err != nil) != tt.res.wantErr {
- t.Errorf("Eventstore.aggregatesToEvents() error = %v, wantErr %v", err, tt.res.wantErr)
- return
- }
+type testPusher struct {
+ events []Event
+ err error
- if err != nil {
- return
- }
-
- if len(tt.res.events) != len(events) {
- t.Errorf("length of events unequal want: %d got %d", len(tt.res.events), len(events))
- return
- }
-
- for i := 0; i < len(tt.res.events); i++ {
- compareEvents(t, tt.res.events[i], events[i])
- }
- })
- }
+ t *testing.T
}
-type testRepo struct {
- events []*repository.Event
- sequence uint64
+func (repo *testPusher) Health(ctx context.Context) error {
+ return nil
+}
+
+func (repo *testPusher) Push(ctx context.Context, commands ...Command) (events []Event, err error) {
+ if repo.err != nil {
+ return nil, repo.err
+ }
+
+ if len(repo.events) != len(commands) {
+ repo.t.Errorf("length of events unequal want: %d got %d", len(repo.events), len(commands))
+ return nil, fmt.Errorf("")
+ }
+
+ events = make([]Event, len(commands))
+
+ for i := 0; i < len(repo.events); i++ {
+
+ var payload []byte
+ switch p := commands[i].Payload().(type) {
+ case []byte:
+ payload = p
+ case nil:
+ // don't do anything
+ default:
+ payload, err = json.Marshal(p)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ compareEvents(repo.t, repo.events[i], commands[i])
+ events[i] = &BaseEvent{
+ Seq: uint64(i),
+ Creation: time.Now(),
+ EventType: commands[i].Type(),
+ Data: payload,
+ User: commands[i].Creator(),
+ Agg: &Aggregate{
+ Version: commands[i].Aggregate().Version,
+ ID: commands[i].Aggregate().ID,
+ Type: commands[i].Aggregate().Type,
+ ResourceOwner: commands[i].Aggregate().ResourceOwner,
+ InstanceID: commands[i].Aggregate().InstanceID,
+ },
+ }
+ }
+
+ return events, nil
+}
+
+type testQuerier struct {
+ events []Event
+ sequence float64
instances []string
err error
t *testing.T
}
-func (repo *testRepo) Health(ctx context.Context) error {
+func (repo *testQuerier) Health(ctx context.Context) error {
return nil
}
-func (repo *testRepo) CreateInstance(ctx context.Context, instance string) error {
+func (repo *testQuerier) CreateInstance(ctx context.Context, instance string) error {
return nil
}
-
-func (repo *testRepo) Step20(context.Context, uint64) error { return nil }
-
-func (repo *testRepo) Push(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error {
- if repo.err != nil {
- return repo.err
- }
-
- if len(repo.events) != len(events) {
- repo.t.Errorf("length of events unequal want: %d got %d", len(repo.events), len(events))
- return fmt.Errorf("")
- }
-
- for i := 0; i < len(repo.events); i++ {
- compareEvents(repo.t, repo.events[i], events[i])
- }
-
- return nil
-}
-
-func (repo *testRepo) Filter(ctx context.Context, searchQuery *repository.SearchQuery) ([]*repository.Event, error) {
+func (repo *testQuerier) Filter(ctx context.Context, searchQuery *SearchQueryBuilder) ([]Event, error) {
if repo.err != nil {
return nil, repo.err
}
return repo.events, nil
}
-func (repo *testRepo) LatestSequence(ctx context.Context, queryFactory *repository.SearchQuery) (uint64, error) {
+func (repo *testQuerier) LatestSequence(ctx context.Context, queryFactory *SearchQueryBuilder) (float64, error) {
if repo.err != nil {
return 0, repo.err
}
return repo.sequence, nil
}
-func (repo *testRepo) InstanceIDs(ctx context.Context, queryFactory *repository.SearchQuery) ([]string, error) {
+func (repo *testQuerier) InstanceIDs(ctx context.Context, queryFactory *SearchQueryBuilder) ([]string, error) {
if repo.err != nil {
return nil, repo.err
}
@@ -748,8 +428,8 @@ func TestEventstore_Push(t *testing.T) {
events []Command
}
type fields struct {
- repo *testRepo
- eventMapper map[EventType]func(*repository.Event) (Event, error)
+ pusher *testPusher
+ eventMapper map[EventType]func(Event) (Event, error)
}
type res struct {
wantErr bool
@@ -768,31 +448,37 @@ func TestEventstore_Push(t *testing.T) {
"1",
"",
func() interface{} {
- return nil
+ return []byte(nil)
},
false),
},
},
fields: fields{
- repo: &testRepo{
+ pusher: &testPusher{
t: t,
- events: []*repository.Event{
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
+ events: []Event{
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "1",
+ Type: "test.aggregate",
+ ResourceOwner: "caos",
+ InstanceID: "zitadel",
+ },
+ Data: []byte(nil),
+ User: "editorUser",
+ EventType: "test.event",
},
},
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
- return &testEvent{}, nil
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
+ return &testEvent{
+ BaseEvent: BaseEvent{
+ Agg: &Aggregate{
+ Type: e.Aggregate().Type,
+ },
+ },
+ }, nil
},
},
},
@@ -805,49 +491,55 @@ func TestEventstore_Push(t *testing.T) {
"1",
"",
func() interface{} {
- return nil
+ return []byte(nil)
},
false),
newTestEvent(
"1",
"",
func() interface{} {
- return nil
+ return []byte(nil)
},
false),
},
},
fields: fields{
- repo: &testRepo{
+ pusher: &testPusher{
t: t,
- events: []*repository.Event{
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
+ events: []Event{
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "1",
+ Type: "test.aggregate",
+ ResourceOwner: "caos",
+ InstanceID: "zitadel",
+ },
+ Data: []byte(nil),
+ User: "editorUser",
+ EventType: "test.event",
},
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "1",
+ Type: "test.aggregate",
+ ResourceOwner: "caos",
+ InstanceID: "zitadel",
+ },
+ Data: []byte(nil),
+ User: "editorUser",
+ EventType: "test.event",
},
},
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
- return &testEvent{}, nil
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
+ return &testEvent{
+ BaseEvent: BaseEvent{
+ Agg: &Aggregate{
+ Type: e.Aggregate().Type,
+ },
+ },
+ }, nil
},
},
},
@@ -863,71 +555,77 @@ func TestEventstore_Push(t *testing.T) {
"1",
"",
func() interface{} {
- return nil
+ return []byte(nil)
},
false),
newTestEvent(
"1",
"",
func() interface{} {
- return nil
+ return []byte(nil)
},
false),
newTestEvent(
"2",
"",
func() interface{} {
- return nil
+ return []byte(nil)
},
true),
},
},
fields: fields{
- repo: &testRepo{
+ pusher: &testPusher{
t: t,
events: combineEventLists(
- []*repository.Event{
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
+ []Event{
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "1",
+ Type: "test.aggregate",
+ ResourceOwner: "caos",
+ InstanceID: "zitadel",
+ },
+ Data: []byte(nil),
+ User: "editorUser",
+ EventType: "test.event",
},
- {
- AggregateID: "1",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "1",
+ Type: "test.aggregate",
+ ResourceOwner: "caos",
+ InstanceID: "zitadel",
+ },
+ Data: []byte(nil),
+ User: "editorUser",
+ EventType: "test.event",
},
},
- []*repository.Event{
- {
- AggregateID: "2",
- AggregateType: "test.aggregate",
- Data: []byte(nil),
- EditorService: "editorService",
- EditorUser: "editorUser",
- ResourceOwner: sql.NullString{String: "caos", Valid: true},
- InstanceID: "zitadel",
- Type: "test.event",
- Version: "v1",
+ []Event{
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "2",
+ Type: "test.aggregate",
+ ResourceOwner: "caos",
+ InstanceID: "zitadel",
+ },
+ Data: []byte(nil),
+ User: "editorUser",
+ EventType: "test.event",
},
},
),
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
- return &testEvent{}, nil
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
+ return &testEvent{
+ BaseEvent: BaseEvent{
+ Agg: &Aggregate{
+ Type: e.Aggregate().Type,
+ },
+ },
+ }, nil
},
},
},
@@ -943,13 +641,13 @@ func TestEventstore_Push(t *testing.T) {
"1",
"",
func() interface{} {
- return nil
+ return []byte(nil)
},
false),
},
},
fields: fields{
- repo: &testRepo{
+ pusher: &testPusher{
t: t,
err: errors.ThrowInternal(nil, "V2-qaa4S", "test err"),
},
@@ -972,7 +670,7 @@ func TestEventstore_Push(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
+ pusher: &testPusher{
t: t,
err: errors.ThrowInternal(nil, "V2-qaa4S", "test err"),
},
@@ -985,7 +683,7 @@ func TestEventstore_Push(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
es := &Eventstore{
- repo: tt.fields.repo,
+ pusher: tt.fields.pusher,
interceptorMutex: sync.Mutex{},
eventInterceptors: map[EventType]eventTypeInterceptors{},
}
@@ -1010,8 +708,8 @@ func TestEventstore_FilterEvents(t *testing.T) {
query *SearchQueryBuilder
}
type fields struct {
- repo *testRepo
- eventMapper map[EventType]func(*repository.Event) (Event, error)
+ repo *testQuerier
+ eventMapper map[EventType]func(Event) (Event, error)
}
type res struct {
wantErr bool
@@ -1022,20 +720,11 @@ func TestEventstore_FilterEvents(t *testing.T) {
fields fields
res res
}{
- {
- name: "invalid factory",
- args: args{
- query: nil,
- },
- res: res{
- wantErr: true,
- },
- },
{
name: "no events",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsEvent,
+ columns: ColumnsEvent,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1045,12 +734,12 @@ func TestEventstore_FilterEvents(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
- events: []*repository.Event{},
+ repo: &testQuerier{
+ events: []Event{},
t: t,
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
return &testEvent{}, nil
},
},
@@ -1063,7 +752,7 @@ func TestEventstore_FilterEvents(t *testing.T) {
name: "repo error",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsEvent,
+ columns: ColumnsEvent,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1073,12 +762,12 @@ func TestEventstore_FilterEvents(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
+ repo: &testQuerier{
t: t,
err: errors.ThrowInternal(nil, "V2-RfkBa", "test err"),
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
return &testEvent{}, nil
},
},
@@ -1091,7 +780,7 @@ func TestEventstore_FilterEvents(t *testing.T) {
name: "found events",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsEvent,
+ columns: ColumnsEvent,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1101,17 +790,19 @@ func TestEventstore_FilterEvents(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
- events: []*repository.Event{
- {
- AggregateID: "test.aggregate",
- Type: "test.event",
+ repo: &testQuerier{
+ events: []Event{
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "test.aggregate",
+ },
+ EventType: "test.event",
},
},
t: t,
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
return &testEvent{}, nil
},
},
@@ -1124,7 +815,7 @@ func TestEventstore_FilterEvents(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
es := &Eventstore{
- repo: tt.fields.repo,
+ querier: tt.fields.repo,
interceptorMutex: sync.Mutex{},
eventInterceptors: map[EventType]eventTypeInterceptors{},
}
@@ -1150,7 +841,7 @@ func TestEventstore_LatestSequence(t *testing.T) {
query *SearchQueryBuilder
}
type fields struct {
- repo *testRepo
+ repo *testQuerier
}
type res struct {
wantErr bool
@@ -1161,20 +852,11 @@ func TestEventstore_LatestSequence(t *testing.T) {
fields fields
res res
}{
- {
- name: "invalid factory",
- args: args{
- query: nil,
- },
- res: res{
- wantErr: true,
- },
- },
{
name: "no events",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsMaxSequence,
+ columns: ColumnsMaxSequence,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1184,8 +866,8 @@ func TestEventstore_LatestSequence(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
- events: []*repository.Event{},
+ repo: &testQuerier{
+ events: []Event{},
t: t,
},
},
@@ -1197,7 +879,7 @@ func TestEventstore_LatestSequence(t *testing.T) {
name: "repo error",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsMaxSequence,
+ columns: ColumnsMaxSequence,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1207,7 +889,7 @@ func TestEventstore_LatestSequence(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
+ repo: &testQuerier{
t: t,
err: errors.ThrowInternal(nil, "V2-RfkBa", "test err"),
},
@@ -1220,7 +902,7 @@ func TestEventstore_LatestSequence(t *testing.T) {
name: "found events",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsMaxSequence,
+ columns: ColumnsMaxSequence,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1230,9 +912,9 @@ func TestEventstore_LatestSequence(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
- sequence: 50,
- t: t,
+ repo: &testQuerier{
+ // sequence: time.Now(),
+ t: t,
},
},
res: res{
@@ -1243,7 +925,7 @@ func TestEventstore_LatestSequence(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
es := &Eventstore{
- repo: tt.fields.repo,
+ querier: tt.fields.repo,
}
_, err := es.LatestSequence(context.Background(), tt.args.query)
@@ -1282,8 +964,8 @@ func TestEventstore_FilterToReducer(t *testing.T) {
readModel reducer
}
type fields struct {
- repo *testRepo
- eventMapper map[EventType]func(*repository.Event) (Event, error)
+ repo *testQuerier
+ eventMapper map[EventType]func(Event) (Event, error)
}
type res struct {
wantErr bool
@@ -1294,20 +976,11 @@ func TestEventstore_FilterToReducer(t *testing.T) {
fields fields
res res
}{
- {
- name: "invalid factory",
- args: args{
- query: nil,
- },
- res: res{
- wantErr: true,
- },
- },
{
name: "no events",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsEvent,
+ columns: ColumnsEvent,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1321,12 +994,12 @@ func TestEventstore_FilterToReducer(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
- events: []*repository.Event{},
+ repo: &testQuerier{
+ events: []Event{},
t: t,
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
return &testEvent{}, nil
},
},
@@ -1339,7 +1012,7 @@ func TestEventstore_FilterToReducer(t *testing.T) {
name: "repo error",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsEvent,
+ columns: ColumnsEvent,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1353,12 +1026,12 @@ func TestEventstore_FilterToReducer(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
+ repo: &testQuerier{
t: t,
err: errors.ThrowInternal(nil, "V2-RfkBa", "test err"),
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
return &testEvent{}, nil
},
},
@@ -1371,7 +1044,7 @@ func TestEventstore_FilterToReducer(t *testing.T) {
name: "found events",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsEvent,
+ columns: ColumnsEvent,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1385,17 +1058,19 @@ func TestEventstore_FilterToReducer(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
- events: []*repository.Event{
- {
- AggregateID: "test.aggregate",
- Type: "test.event",
+ repo: &testQuerier{
+ events: []Event{
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "test.aggregate",
+ },
+ EventType: "test.event",
},
},
t: t,
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
return &testEvent{}, nil
},
},
@@ -1405,7 +1080,7 @@ func TestEventstore_FilterToReducer(t *testing.T) {
name: "append in reducer fails",
args: args{
query: &SearchQueryBuilder{
- columns: repository.ColumnsEvent,
+ columns: ColumnsEvent,
queries: []*SearchQuery{
{
builder: &SearchQueryBuilder{},
@@ -1420,17 +1095,19 @@ func TestEventstore_FilterToReducer(t *testing.T) {
},
},
fields: fields{
- repo: &testRepo{
- events: []*repository.Event{
- {
- AggregateID: "test.aggregate",
- Type: "test.event",
+ repo: &testQuerier{
+ events: []Event{
+ &BaseEvent{
+ Agg: &Aggregate{
+ ID: "test.aggregate",
+ },
+ EventType: "test.event",
},
},
t: t,
},
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(e *repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(e Event) (Event, error) {
return &testEvent{}, nil
},
},
@@ -1443,7 +1120,7 @@ func TestEventstore_FilterToReducer(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
es := &Eventstore{
- repo: tt.fields.repo,
+ querier: tt.fields.repo,
interceptorMutex: sync.Mutex{},
eventInterceptors: map[EventType]eventTypeInterceptors{},
}
@@ -1463,52 +1140,46 @@ func TestEventstore_FilterToReducer(t *testing.T) {
}
}
-func combineEventLists(lists ...[]*repository.Event) []*repository.Event {
- events := []*repository.Event{}
+func combineEventLists(lists ...[]Event) []Event {
+ events := []Event{}
for _, list := range lists {
events = append(events, list...)
}
return events
}
-func compareEvents(t *testing.T, want, got *repository.Event) {
+func compareEvents(t *testing.T, want Event, got Command) {
t.Helper()
- if want.AggregateID != got.AggregateID {
- t.Errorf("wrong aggregateID got %q want %q", got.AggregateID, want.AggregateID)
+ if want.Aggregate().ID != got.Aggregate().ID {
+ t.Errorf("wrong aggregateID got %q want %q", got.Aggregate().ID, want.Aggregate().ID)
}
- if want.AggregateType != got.AggregateType {
- t.Errorf("wrong aggregateType got %q want %q", got.AggregateType, want.AggregateType)
+ if want.Aggregate().Type != got.Aggregate().Type {
+ t.Errorf("wrong aggregateType got %q want %q", got.Aggregate().Type, want.Aggregate().Type)
}
- if !reflect.DeepEqual(want.Data, got.Data) {
- t.Errorf("wrong data got %s want %s", string(got.Data), string(want.Data))
+ if !reflect.DeepEqual(want.DataAsBytes(), got.Payload()) {
+ t.Errorf("wrong data got %s want %s", string(got.Payload().([]byte)), string(want.DataAsBytes()))
}
- if want.EditorService != got.EditorService {
- t.Errorf("wrong editor service got %q want %q", got.EditorService, want.EditorService)
+ if want.Creator() != got.Creator() {
+ t.Errorf("wrong creator got %q want %q", got.Creator(), want.Creator())
}
- if want.EditorUser != got.EditorUser {
- t.Errorf("wrong editor user got %q want %q", got.EditorUser, want.EditorUser)
+ if want.Aggregate().ResourceOwner != got.Aggregate().ResourceOwner {
+ t.Errorf("wrong resource owner got %q want %q", got.Aggregate().ResourceOwner, want.Aggregate().ResourceOwner)
}
- if want.ResourceOwner != got.ResourceOwner {
- t.Errorf("wrong resource owner got %q want %q", got.ResourceOwner.String, want.ResourceOwner.String)
+ if want.Type() != got.Type() {
+ t.Errorf("wrong event type got %q want %q", got.Type(), want.Type())
}
- if want.Type != got.Type {
- t.Errorf("wrong event type got %q want %q", got.Type, want.Type)
- }
- if want.Version != got.Version {
- t.Errorf("wrong version got %q want %q", got.Version, want.Version)
- }
- if want.PreviousAggregateSequence != got.PreviousAggregateSequence {
- t.Errorf("wrong previous sequence got %d want %d", got.PreviousAggregateSequence, want.PreviousAggregateSequence)
+ if want.Revision() != got.Revision() {
+ t.Errorf("wrong version got %q want %q", got.Revision(), want.Revision())
}
}
func TestEventstore_mapEvents(t *testing.T) {
type fields struct {
- eventMapper map[EventType]func(*repository.Event) (Event, error)
+ eventMapper map[EventType]func(Event) (Event, error)
}
type args struct {
- events []*repository.Event
+ events []Event
}
type res struct {
events []Event
@@ -1520,36 +1191,18 @@ func TestEventstore_mapEvents(t *testing.T) {
args args
res res
}{
- //{
- // name: "no mapper",
- // args: args{
- // events: []*repository.Event{
- // {
- // Type: "no.mapper.found",
- // },
- // },
- // },
- // fields: fields{
- // eventMapper: map[EventType]func(*repository.Event) (EventReader, error){},
- // },
- // res: res{
- // //TODO: as long as not all events are implemented in v2 eventstore doesn't return an error
- // // afterwards it will return an error on un
- // wantErr: true,
- // },
- //},
{
name: "mapping failed",
args: args{
- events: []*repository.Event{
- {
- Type: "test.event",
+ events: []Event{
+ &BaseEvent{
+ EventType: "test.event",
},
},
},
fields: fields{
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(*repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(Event) (Event, error) {
return nil, errors.ThrowInternal(nil, "V2-8FbQk", "test err")
},
},
@@ -1561,15 +1214,15 @@ func TestEventstore_mapEvents(t *testing.T) {
{
name: "mapping succeeded",
args: args{
- events: []*repository.Event{
- {
- Type: "test.event",
+ events: []Event{
+ &BaseEvent{
+ EventType: "test.event",
},
},
},
fields: fields{
- eventMapper: map[EventType]func(*repository.Event) (Event, error){
- "test.event": func(*repository.Event) (Event, error) {
+ eventMapper: map[EventType]func(Event) (Event, error){
+ "test.event": func(Event) (Event, error) {
return &testEvent{}, nil
},
},
diff --git a/internal/eventstore/example_test.go b/internal/eventstore/example_test.go
index 4e4e849a51..c1051f8260 100644
--- a/internal/eventstore/example_test.go
+++ b/internal/eventstore/example_test.go
@@ -2,13 +2,13 @@ package eventstore_test
import (
"context"
- "encoding/json"
"testing"
"time"
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ query_repo "github.com/zitadel/zitadel/internal/eventstore/repository/sql"
+ v3 "github.com/zitadel/zitadel/internal/eventstore/v3"
)
// ------------------------------------------------------------
@@ -43,12 +43,13 @@ func NewUserAddedEvent(id string, firstName string) *UserAddedEvent {
}
}
-func UserAddedEventMapper() (eventstore.AggregateType, eventstore.EventType, func(*repository.Event) (eventstore.Event, error)) {
- return "user", "user.added", func(event *repository.Event) (eventstore.Event, error) {
+func UserAddedEventMapper() (eventstore.AggregateType, eventstore.EventType, func(eventstore.Event) (eventstore.Event, error)) {
+ return "user", "user.added", func(event eventstore.Event) (eventstore.Event, error) {
e := &UserAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+
+ err := event.Unmarshal(e)
if err != nil {
return nil, err
}
@@ -56,11 +57,11 @@ func UserAddedEventMapper() (eventstore.AggregateType, eventstore.EventType, fun
}
}
-func (e *UserAddedEvent) Data() interface{} {
+func (e *UserAddedEvent) Payload() interface{} {
return e
}
-func (e *UserAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -88,12 +89,12 @@ func NewUserFirstNameChangedEvent(id, firstName string) *UserFirstNameChangedEve
}
}
-func UserFirstNameChangedMapper() (eventstore.AggregateType, eventstore.EventType, func(*repository.Event) (eventstore.Event, error)) {
- return "user", "user.firstName.changed", func(event *repository.Event) (eventstore.Event, error) {
+func UserFirstNameChangedMapper() (eventstore.AggregateType, eventstore.EventType, func(eventstore.Event) (eventstore.Event, error)) {
+ return "user", "user.firstName.changed", func(event eventstore.Event) (eventstore.Event, error) {
e := &UserFirstNameChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, err
}
@@ -101,11 +102,11 @@ func UserFirstNameChangedMapper() (eventstore.AggregateType, eventstore.EventTyp
}
}
-func (e *UserFirstNameChangedEvent) Data() interface{} {
+func (e *UserFirstNameChangedEvent) Payload() interface{} {
return e
}
-func (e *UserFirstNameChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserFirstNameChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -130,19 +131,19 @@ func NewUserPasswordCheckedEvent(id string) *UserPasswordCheckedEvent {
}
}
-func UserPasswordCheckedMapper() (eventstore.AggregateType, eventstore.EventType, func(*repository.Event) (eventstore.Event, error)) {
- return "user", "user.password.checked", func(event *repository.Event) (eventstore.Event, error) {
+func UserPasswordCheckedMapper() (eventstore.AggregateType, eventstore.EventType, func(eventstore.Event) (eventstore.Event, error)) {
+ return "user", "user.password.checked", func(event eventstore.Event) (eventstore.Event, error) {
return &UserPasswordCheckedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
}
}
-func (e *UserPasswordCheckedEvent) Data() interface{} {
+func (e *UserPasswordCheckedEvent) Payload() interface{} {
return nil
}
-func (e *UserPasswordCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserPasswordCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -167,19 +168,19 @@ func NewUserDeletedEvent(id string) *UserDeletedEvent {
}
}
-func UserDeletedMapper() (eventstore.AggregateType, eventstore.EventType, func(*repository.Event) (eventstore.Event, error)) {
- return "user", "user.deleted", func(event *repository.Event) (eventstore.Event, error) {
+func UserDeletedMapper() (eventstore.AggregateType, eventstore.EventType, func(eventstore.Event) (eventstore.Event, error)) {
+ return "user", "user.deleted", func(event eventstore.Event) (eventstore.Event, error) {
return &UserDeletedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
}
}
-func (e *UserDeletedEvent) Data() interface{} {
+func (e *UserDeletedEvent) Payload() interface{} {
return nil
}
-func (e *UserDeletedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserDeletedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -286,12 +287,13 @@ func (rm *UserReadModel) Reduce() error {
// ------------------------------------------------------------
func TestUserReadModel(t *testing.T) {
- es, err := eventstore.Start(&eventstore.Config{Client: testCRDBClient})
- if err != nil {
- t.Errorf("unable to start eventstore: %v", err)
- t.FailNow()
- }
- // es := eventstore.NewEventstore(&eventstore.Config{re})
+ es := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: query_repo.NewCRDB(testCRDBClient),
+ Pusher: v3.NewEventstore(testCRDBClient),
+ },
+ )
+
es.RegisterFilterEventMapper(UserAddedEventMapper()).
RegisterFilterEventMapper(UserFirstNameChangedMapper()).
RegisterFilterEventMapper(UserPasswordCheckedMapper()).
diff --git a/internal/eventstore/handler/crdb/current_sequence.go b/internal/eventstore/handler/crdb/current_sequence.go
deleted file mode 100644
index 2b92343be8..0000000000
--- a/internal/eventstore/handler/crdb/current_sequence.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package crdb
-
-import (
- "context"
- "database/sql"
- "strconv"
- "strings"
-
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
-)
-
-const (
- currentSequenceStmtFormat = `SELECT current_sequence, aggregate_type, instance_id FROM %s WHERE projection_name = $1 AND instance_id = ANY ($2) FOR UPDATE`
- currentSequenceStmtWithoutLockFormat = `SELECT current_sequence, aggregate_type, instance_id FROM %s WHERE projection_name = $1 AND instance_id = ANY ($2)`
- updateCurrentSequencesStmtFormat = `INSERT INTO %s (projection_name, aggregate_type, current_sequence, instance_id, timestamp) VALUES `
- updateCurrentSequencesConflictStmt = ` ON CONFLICT (projection_name, aggregate_type, instance_id) DO UPDATE SET current_sequence = EXCLUDED.current_sequence, timestamp = EXCLUDED.timestamp`
-)
-
-type currentSequences map[eventstore.AggregateType][]*instanceSequence
-
-type instanceSequence struct {
- instanceID string
- sequence uint64
-}
-
-func (h *StatementHandler) currentSequences(ctx context.Context, isTx bool, query func(context.Context, func(*sql.Rows) error, string, ...interface{}) error, instanceIDs database.StringArray) (currentSequences, error) {
- stmt := h.currentSequenceStmt
- if !isTx {
- stmt = h.currentSequenceWithoutLockStmt
- }
-
- sequences := make(currentSequences, len(h.aggregates))
- err := query(ctx,
- func(rows *sql.Rows) error {
- for rows.Next() {
- var (
- aggregateType eventstore.AggregateType
- sequence uint64
- instanceID string
- )
-
- err := rows.Scan(&sequence, &aggregateType, &instanceID)
- if err != nil {
- return errors.ThrowInternal(err, "CRDB-dbatK", "scan failed")
- }
-
- sequences[aggregateType] = append(sequences[aggregateType], &instanceSequence{
- sequence: sequence,
- instanceID: instanceID,
- })
- }
- return nil
- },
- stmt, h.ProjectionName, instanceIDs)
- if err != nil {
- return nil, err
- }
- return sequences, nil
-}
-
-func (h *StatementHandler) updateCurrentSequences(tx *sql.Tx, sequences currentSequences) error {
- valueQueries := make([]string, 0, len(sequences))
- valueCounter := 0
- values := make([]interface{}, 0, len(sequences)*3)
- for aggregate, instanceSequence := range sequences {
- for _, sequence := range instanceSequence {
- valueQueries = append(valueQueries, "($"+strconv.Itoa(valueCounter+1)+", $"+strconv.Itoa(valueCounter+2)+", $"+strconv.Itoa(valueCounter+3)+", $"+strconv.Itoa(valueCounter+4)+", NOW())")
- valueCounter += 4
- values = append(values, h.ProjectionName, aggregate, sequence.sequence, sequence.instanceID)
- }
- }
-
- res, err := tx.Exec(h.updateSequencesBaseStmt+strings.Join(valueQueries, ", ")+updateCurrentSequencesConflictStmt, values...)
- if err != nil {
- return errors.ThrowInternal(err, "CRDB-TrH2Z", "unable to exec update sequence")
- }
- if rows, _ := res.RowsAffected(); rows < 1 {
- return errSeqNotUpdated
- }
- return nil
-}
diff --git a/internal/eventstore/handler/crdb/db_mock_test.go b/internal/eventstore/handler/crdb/db_mock_test.go
index 20b70cf5e8..aab63a4141 100644
--- a/internal/eventstore/handler/crdb/db_mock_test.go
+++ b/internal/eventstore/handler/crdb/db_mock_test.go
@@ -1,301 +1,15 @@
package crdb
import (
- "database/sql"
"database/sql/driver"
- "strings"
- "testing"
"time"
"github.com/DATA-DOG/go-sqlmock"
-
"github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore"
)
type mockExpectation func(sqlmock.Sqlmock)
-func expectFailureCount(tableName string, projectionName, instanceID string, failedSeq, failureCount uint64) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectQuery(`WITH failures AS \(SELECT failure_count FROM `+tableName+` WHERE projection_name = \$1 AND failed_sequence = \$2 AND instance_id = \$3\) SELECT COALESCE\(\(SELECT failure_count FROM failures\), 0\) AS failure_count`).
- WithArgs(projectionName, failedSeq, instanceID).
- WillReturnRows(
- sqlmock.NewRows([]string{"failure_count"}).
- AddRow(failureCount),
- )
- }
-}
-
-func expectUpdateFailureCount(tableName string, projectionName, instanceID string, seq, failureCount uint64) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec(`INSERT INTO `+tableName+` \(projection_name, failed_sequence, failure_count, error, instance_id, last_failed\) VALUES \(\$1, \$2, \$3, \$4\, \$5\, \$6\) ON CONFLICT \(projection_name, failed_sequence, instance_id\) DO UPDATE SET failure_count = EXCLUDED\.failure_count, error = EXCLUDED\.error, last_failed = EXCLUDED\.last_failed`).
- WithArgs(projectionName, seq, failureCount, sqlmock.AnyArg(), instanceID, "NOW()").WillReturnResult(sqlmock.NewResult(1, 1))
- }
-}
-
-func expectCreate(projectionName string, columnNames, placeholders []string) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- args := make([]driver.Value, len(columnNames))
- for i := 0; i < len(columnNames); i++ {
- args[i] = sqlmock.AnyArg()
- placeholders[i] = `\` + placeholders[i]
- }
- m.ExpectExec("INSERT INTO " + projectionName + ` \(` + strings.Join(columnNames, ", ") + `\) VALUES \(` + strings.Join(placeholders, ", ") + `\)`).
- WithArgs(args...).
- WillReturnResult(sqlmock.NewResult(1, 1))
- }
-}
-
-func expectCreateErr(projectionName string, columnNames, placeholders []string, err error) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- args := make([]driver.Value, len(columnNames))
- for i := 0; i < len(columnNames); i++ {
- args[i] = sqlmock.AnyArg()
- placeholders[i] = `\` + placeholders[i]
- }
- m.ExpectExec("INSERT INTO " + projectionName + ` \(` + strings.Join(columnNames, ", ") + `\) VALUES \(` + strings.Join(placeholders, ", ") + `\)`).
- WithArgs(args...).
- WillReturnError(err)
- }
-}
-
-func expectBegin() func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectBegin()
- }
-}
-
-func expectBeginErr(err error) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectBegin().WillReturnError(err)
- }
-}
-
-func expectCommit() func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectCommit()
- }
-}
-
-func expectCommitErr(err error) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectCommit().WillReturnError(err)
- }
-}
-
-func expectRollback() func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectRollback()
- }
-}
-
-func expectSavePoint() func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("SAVEPOINT push_stmt").
- WillReturnResult(sqlmock.NewResult(1, 1))
- }
-}
-
-func expectSavePointErr(err error) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("SAVEPOINT push_stmt").
- WillReturnError(err)
- }
-}
-
-func expectSavePointRollback() func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("ROLLBACK TO SAVEPOINT push_stmt").
- WillReturnResult(sqlmock.NewResult(1, 1))
- }
-}
-
-func expectSavePointRollbackErr(err error) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("ROLLBACK TO SAVEPOINT push_stmt").
- WillReturnError(err)
- }
-}
-
-func expectSavePointRelease() func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("RELEASE push_stmt").
- WillReturnResult(sqlmock.NewResult(1, 1))
- }
-}
-
-func expectCurrentSequence(isTx bool, tableName, projection string, seq uint64, aggregateType string, instanceIDs []string) func(sqlmock.Sqlmock) {
- rows := sqlmock.NewRows([]string{"current_sequence", "aggregate_type", "instance_id"})
- for _, instanceID := range instanceIDs {
- rows.AddRow(seq, aggregateType, instanceID)
- }
- return func(m sqlmock.Sqlmock) {
- stmt := `SELECT current_sequence, aggregate_type, instance_id FROM ` + tableName + ` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\)`
- if isTx {
- stmt += " FOR UPDATE"
- }
- m.ExpectQuery(stmt).
- WithArgs(
- projection,
- database.StringArray(instanceIDs),
- ).
- WillReturnRows(
- rows,
- )
- }
-}
-
-func expectCurrentSequenceErr(isTx bool, tableName, projection string, instanceIDs []string, err error) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- stmt := `SELECT current_sequence, aggregate_type, instance_id FROM ` + tableName + ` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\)`
- if isTx {
- stmt += " FOR UPDATE"
- }
- m.ExpectQuery(stmt).
- WithArgs(
- projection,
- database.StringArray(instanceIDs),
- ).
- WillReturnError(err)
- }
-}
-
-func expectCurrentSequenceNoRows(tableName, projection string, instanceIDs []string) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM `+tableName+` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\) FOR UPDATE`).
- WithArgs(
- projection,
- database.StringArray(instanceIDs),
- ).
- WillReturnRows(
- sqlmock.NewRows([]string{"current_sequence", "aggregate_type", "instance_id"}),
- )
- }
-}
-
-func expectCurrentSequenceScanErr(tableName, projection string, instanceIDs []string) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectQuery(`SELECT current_sequence, aggregate_type, instance_id FROM `+tableName+` WHERE projection_name = \$1 AND instance_id = ANY \(\$2\) FOR UPDATE`).
- WithArgs(
- projection,
- database.StringArray(instanceIDs),
- ).
- WillReturnRows(
- sqlmock.NewRows([]string{"current_sequence", "aggregate_type", "instance_id"}).
- RowError(0, sql.ErrTxDone).
- AddRow(0, "agg", "instanceID"),
- )
- }
-}
-
-func expectUpdateCurrentSequence(tableName, projection string, seq uint64, aggregateType, instanceID string) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("INSERT INTO "+tableName+` \(projection_name, aggregate_type, current_sequence, instance_id, timestamp\) VALUES \(\$1, \$2, \$3, \$4, NOW\(\)\) ON CONFLICT \(projection_name, aggregate_type, instance_id\) DO UPDATE SET current_sequence = EXCLUDED.current_sequence, timestamp = EXCLUDED.timestamp`).
- WithArgs(
- projection,
- aggregateType,
- seq,
- instanceID,
- ).
- WillReturnResult(
- sqlmock.NewResult(1, 1),
- )
- }
-}
-
-func expectUpdateThreeCurrentSequence(t *testing.T, tableName, projection string, sequences currentSequences) func(sqlmock.Sqlmock) {
- args := make([][]interface{}, 0)
- for aggregateType, instanceSequences := range sequences {
- for _, sequence := range instanceSequences {
- args = append(args, []interface{}{
- projection,
- aggregateType,
- sequence.sequence,
- sequence.instanceID,
- })
- }
- }
- matcher := ¤tSequenceMatcher{t: t, seq: args}
- matchers := make([]driver.Value, len(args)*4)
- for i := 0; i < len(args)*4; i++ {
- matchers[i] = matcher
- }
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("INSERT INTO " + tableName + ` \(projection_name, aggregate_type, current_sequence, instance_id, timestamp\) VALUES \(\$1, \$2, \$3, \$4, NOW\(\)\), \(\$5, \$6, \$7, \$8, NOW\(\)\), \(\$9, \$10, \$11, \$12, NOW\(\)\) ON CONFLICT \(projection_name, aggregate_type, instance_id\) DO UPDATE SET current_sequence = EXCLUDED.current_sequence, timestamp = EXCLUDED.timestamp`).
- WithArgs(
- matchers...,
- ).
- WillReturnResult(
- sqlmock.NewResult(1, 1),
- )
- }
-}
-
-type currentSequenceMatcher struct {
- seq [][]interface{}
- i int
- t *testing.T
-}
-
-func (m *currentSequenceMatcher) Match(value driver.Value) bool {
- if m.i%4 == 0 {
- m.i = 0
- }
- left := make([]interface{}, 0, len(m.seq))
- for _, seq := range m.seq {
- found := seq[m.i]
- if found == nil {
- continue
- }
- switch v := value.(type) {
- case string:
- if found == v || found == eventstore.AggregateType(v) {
- seq[m.i] = nil
- m.i++
- return true
- }
- case int64:
- if found == uint64(v) {
- seq[m.i] = nil
- m.i++
- return true
- }
- }
- left = append(left, found)
- }
- m.t.Errorf("expected: %v, possible left values: %v", value, left)
- m.t.FailNow()
- return false
-}
-
-func expectUpdateCurrentSequenceErr(tableName, projection string, seq uint64, err error, aggregateType, instanceID string) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("INSERT INTO "+tableName+` \(projection_name, aggregate_type, current_sequence, instance_id, timestamp\) VALUES \(\$1, \$2, \$3, \$4, NOW\(\)\) ON CONFLICT \(projection_name, aggregate_type, instance_id\) DO UPDATE SET current_sequence = EXCLUDED.current_sequence, timestamp = EXCLUDED.timestamp`).
- WithArgs(
- projection,
- aggregateType,
- seq,
- instanceID,
- ).
- WillReturnError(err)
- }
-}
-
-func expectUpdateCurrentSequenceNoRows(tableName, projection string, seq uint64, aggregateType, instanceID string) func(sqlmock.Sqlmock) {
- return func(m sqlmock.Sqlmock) {
- m.ExpectExec("INSERT INTO "+tableName+` \(projection_name, aggregate_type, current_sequence, instance_id, timestamp\) VALUES \(\$1, \$2, \$3, \$4, NOW\(\)\) ON CONFLICT \(projection_name, aggregate_type, instance_id\) DO UPDATE SET current_sequence = EXCLUDED.current_sequence, timestamp = EXCLUDED.timestamp`).
- WithArgs(
- projection,
- aggregateType,
- seq,
- instanceID,
- ).
- WillReturnResult(
- sqlmock.NewResult(0, 0),
- )
- }
-}
-
func expectLock(lockTable, workerName string, d time.Duration, instanceID string) func(sqlmock.Sqlmock) {
return func(m sqlmock.Sqlmock) {
m.ExpectExec(`INSERT INTO `+lockTable+
@@ -308,7 +22,7 @@ func expectLock(lockTable, workerName string, d time.Duration, instanceID string
d,
projectionName,
instanceID,
- database.StringArray{instanceID},
+ database.TextArray[string]{instanceID},
).
WillReturnResult(
sqlmock.NewResult(1, 1),
@@ -329,7 +43,7 @@ func expectLockMultipleInstances(lockTable, workerName string, d time.Duration,
projectionName,
instanceID1,
instanceID2,
- database.StringArray{instanceID1, instanceID2},
+ database.TextArray[string]{instanceID1, instanceID2},
).
WillReturnResult(
sqlmock.NewResult(1, 1),
@@ -349,7 +63,7 @@ func expectLockNoRows(lockTable, workerName string, d time.Duration, instanceID
d,
projectionName,
instanceID,
- database.StringArray{instanceID},
+ database.TextArray[string]{instanceID},
).
WillReturnResult(driver.ResultNoRows)
}
@@ -367,7 +81,7 @@ func expectLockErr(lockTable, workerName string, d time.Duration, instanceID str
d,
projectionName,
instanceID,
- database.StringArray{instanceID},
+ database.TextArray[string]{instanceID},
).
WillReturnError(err)
}
diff --git a/internal/eventstore/handler/crdb/failed_stmt.go b/internal/eventstore/handler/crdb/failed_stmt.go
deleted file mode 100644
index b7b10844e7..0000000000
--- a/internal/eventstore/handler/crdb/failed_stmt.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package crdb
-
-import (
- "database/sql"
-
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
-)
-
-const (
- setFailureCountStmtFormat = "INSERT INTO %s" +
- " (projection_name, failed_sequence, failure_count, error, instance_id, last_failed)" +
- " VALUES ($1, $2, $3, $4, $5, $6) ON CONFLICT (projection_name, failed_sequence, instance_id)" +
- " DO UPDATE SET failure_count = EXCLUDED.failure_count, error = EXCLUDED.error, last_failed = EXCLUDED.last_failed"
- failureCountStmtFormat = "WITH failures AS (SELECT failure_count FROM %s WHERE projection_name = $1 AND failed_sequence = $2 AND instance_id = $3)" +
- " SELECT COALESCE((SELECT failure_count FROM failures), 0) AS failure_count"
-)
-
-func (h *StatementHandler) handleFailedStmt(tx *sql.Tx, stmt *handler.Statement, execErr error) (shouldContinue bool) {
- failureCount, err := h.failureCount(tx, stmt.Sequence, stmt.InstanceID)
- if err != nil {
- logging.WithFields("projection", h.ProjectionName, "sequence", stmt.Sequence).WithError(err).Warn("unable to get failure count")
- return false
- }
- failureCount += 1
- err = h.setFailureCount(tx, stmt.Sequence, failureCount, execErr, stmt.InstanceID)
- logging.WithFields("projection", h.ProjectionName, "sequence", stmt.Sequence).OnError(err).Warn("unable to update failure count")
-
- return failureCount >= h.maxFailureCount
-}
-
-func (h *StatementHandler) failureCount(tx *sql.Tx, seq uint64, instanceID string) (count uint, err error) {
- row := tx.QueryRow(h.failureCountStmt, h.ProjectionName, seq, instanceID)
- if err = row.Err(); err != nil {
- return 0, errors.ThrowInternal(err, "CRDB-Unnex", "unable to update failure count")
- }
- if err = row.Scan(&count); err != nil {
- return 0, errors.ThrowInternal(err, "CRDB-RwSMV", "unable to scan count")
- }
- return count, nil
-}
-
-func (h *StatementHandler) setFailureCount(tx *sql.Tx, seq uint64, count uint, err error, instanceID string) error {
- _, dbErr := tx.Exec(h.setFailureCountStmt, h.ProjectionName, seq, count, err.Error(), instanceID, "NOW()")
- if dbErr != nil {
- return errors.ThrowInternal(dbErr, "CRDB-4Ht4x", "set failure count failed")
- }
- return nil
-}
diff --git a/internal/eventstore/handler/crdb/handler_stmt.go b/internal/eventstore/handler/crdb/handler_stmt.go
deleted file mode 100644
index 27418bf332..0000000000
--- a/internal/eventstore/handler/crdb/handler_stmt.go
+++ /dev/null
@@ -1,347 +0,0 @@
-package crdb
-
-import (
- "context"
- "database/sql"
- "fmt"
-
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/repository/pseudo"
-)
-
-var (
- errSeqNotUpdated = errors.ThrowInternal(nil, "CRDB-79GWt", "current sequence not updated")
-)
-
-type StatementHandlerConfig struct {
- handler.ProjectionHandlerConfig
-
- Client *database.DB
- SequenceTable string
- LockTable string
- FailedEventsTable string
- MaxFailureCount uint
- BulkLimit uint64
-
- Reducers []handler.AggregateReducer
- InitCheck *handler.Check
-}
-
-type StatementHandler struct {
- *handler.ProjectionHandler
- Locker
-
- client *database.DB
- sequenceTable string
- currentSequenceStmt string
- currentSequenceWithoutLockStmt string
- updateSequencesBaseStmt string
- maxFailureCount uint
- failureCountStmt string
- setFailureCountStmt string
-
- aggregates []eventstore.AggregateType
- reduces map[eventstore.EventType]handler.Reduce
- initCheck *handler.Check
- initialized chan bool
-
- bulkLimit uint64
-
- reduceScheduledPseudoEvent bool
-}
-
-func NewStatementHandler(
- ctx context.Context,
- config StatementHandlerConfig,
-) StatementHandler {
- aggregateTypes := make([]eventstore.AggregateType, 0, len(config.Reducers))
- reduces := make(map[eventstore.EventType]handler.Reduce, len(config.Reducers))
- reduceScheduledPseudoEvent := false
- for _, aggReducer := range config.Reducers {
- aggregateTypes = append(aggregateTypes, aggReducer.Aggregate)
- if aggReducer.Aggregate == pseudo.AggregateType {
- reduceScheduledPseudoEvent = true
- if len(config.Reducers) != 1 ||
- len(aggReducer.EventRedusers) != 1 ||
- aggReducer.EventRedusers[0].Event != pseudo.ScheduledEventType {
- panic("if a pseudo.AggregateType is reduced, exactly one event reducer for pseudo.ScheduledEventType is supported and no other aggregate can be reduced")
- }
- }
- for _, eventReducer := range aggReducer.EventRedusers {
- reduces[eventReducer.Event] = eventReducer.Reduce
- }
- }
-
- h := StatementHandler{
- client: config.Client,
- sequenceTable: config.SequenceTable,
- maxFailureCount: config.MaxFailureCount,
- currentSequenceStmt: fmt.Sprintf(currentSequenceStmtFormat, config.SequenceTable),
- currentSequenceWithoutLockStmt: fmt.Sprintf(currentSequenceStmtWithoutLockFormat, config.SequenceTable),
- updateSequencesBaseStmt: fmt.Sprintf(updateCurrentSequencesStmtFormat, config.SequenceTable),
- failureCountStmt: fmt.Sprintf(failureCountStmtFormat, config.FailedEventsTable),
- setFailureCountStmt: fmt.Sprintf(setFailureCountStmtFormat, config.FailedEventsTable),
- aggregates: aggregateTypes,
- reduces: reduces,
- bulkLimit: config.BulkLimit,
- Locker: NewLocker(config.Client.DB, config.LockTable, config.ProjectionName),
- initCheck: config.InitCheck,
- initialized: make(chan bool),
- reduceScheduledPseudoEvent: reduceScheduledPseudoEvent,
- }
-
- h.ProjectionHandler = handler.NewProjectionHandler(ctx, config.ProjectionHandlerConfig, h.reduce, h.Update, h.searchQuery, h.Lock, h.Unlock, h.initialized, reduceScheduledPseudoEvent)
-
- return h
-}
-
-func (h *StatementHandler) Start() {
- h.initialized <- true
- close(h.initialized)
- if !h.reduceScheduledPseudoEvent {
- h.Subscribe(h.aggregates...)
- }
-}
-
-func (h *StatementHandler) searchQuery(ctx context.Context, instanceIDs []string) (*eventstore.SearchQueryBuilder, uint64, error) {
- if h.reduceScheduledPseudoEvent {
- return nil, 1, nil
- }
- return h.dbSearchQuery(ctx, instanceIDs)
-}
-
-func (h *StatementHandler) dbSearchQuery(ctx context.Context, instanceIDs []string) (*eventstore.SearchQueryBuilder, uint64, error) {
- sequences, err := h.currentSequences(ctx, false, h.client.QueryContext, instanceIDs)
- if err != nil {
- return nil, 0, err
- }
-
- queryBuilder := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).Limit(h.bulkLimit).AllowTimeTravel()
-
- for _, aggregateType := range h.aggregates {
- for _, instanceID := range instanceIDs {
- var seq uint64
- for _, sequence := range sequences[aggregateType] {
- if sequence.instanceID == instanceID {
- seq = sequence.sequence
- break
- }
- }
- queryBuilder.
- AddQuery().
- AggregateTypes(aggregateType).
- SequenceGreater(seq).
- InstanceID(instanceID)
- }
- }
- return queryBuilder, h.bulkLimit, nil
-}
-
-type transaction struct {
- *sql.Tx
-}
-
-func (t *transaction) QueryContext(ctx context.Context, scan func(rows *sql.Rows) error, query string, args ...any) error {
- rows, err := t.Tx.QueryContext(ctx, query, args...)
- if err != nil {
- return err
- }
- defer func() {
- closeErr := rows.Close()
- logging.OnError(closeErr).Info("rows.Close failed")
- }()
-
- if err = scan(rows); err != nil {
- return err
- }
- return rows.Err()
-}
-
-// Update implements handler.Update
-func (h *StatementHandler) Update(ctx context.Context, stmts []*handler.Statement, reduce handler.Reduce) (index int, err error) {
- if len(stmts) == 0 {
- return -1, nil
- }
- instanceIDs := make([]string, 0, len(stmts))
- for _, stmt := range stmts {
- instanceIDs = appendToInstanceIDs(instanceIDs, stmt.InstanceID)
- }
- tx, err := h.client.BeginTx(ctx, nil)
- if err != nil {
- return -1, errors.ThrowInternal(err, "CRDB-e89Gq", "begin failed")
- }
-
- sequences, err := h.currentSequences(ctx, true, (&transaction{Tx: tx}).QueryContext, instanceIDs)
- if err != nil {
- tx.Rollback()
- return -1, err
- }
-
- //checks for events between create statement and current sequence
- // because there could be events between current sequence and a creation event
- // and we cannot check via stmt.PreviousSequence
- if stmts[0].PreviousSequence == 0 {
- previousStmts, err := h.fetchPreviousStmts(ctx, tx, stmts[0].Sequence, stmts[0].InstanceID, sequences, reduce)
- if err != nil {
- tx.Rollback()
- return -1, err
- }
- stmts = append(previousStmts, stmts...)
- }
-
- lastSuccessfulIdx := h.executeStmts(tx, &stmts, sequences)
-
- if lastSuccessfulIdx >= 0 {
- err = h.updateCurrentSequences(tx, sequences)
- if err != nil {
- tx.Rollback()
- return -1, err
- }
- }
-
- if err = tx.Commit(); err != nil {
- return -1, err
- }
-
- if lastSuccessfulIdx < len(stmts)-1 {
- return lastSuccessfulIdx, handler.ErrSomeStmtsFailed
- }
-
- return lastSuccessfulIdx, nil
-}
-
-func (h *StatementHandler) fetchPreviousStmts(ctx context.Context, tx *sql.Tx, stmtSeq uint64, instanceID string, sequences currentSequences, reduce handler.Reduce) (previousStmts []*handler.Statement, err error) {
- query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).SetTx(tx)
- queriesAdded := false
- for _, aggregateType := range h.aggregates {
- for _, sequence := range sequences[aggregateType] {
- if stmtSeq <= sequence.sequence && instanceID == sequence.instanceID {
- continue
- }
-
- query.
- AddQuery().
- AggregateTypes(aggregateType).
- SequenceGreater(sequence.sequence).
- SequenceLess(stmtSeq).
- InstanceID(sequence.instanceID)
-
- queriesAdded = true
- }
- }
-
- if !queriesAdded {
- return nil, nil
- }
-
- events, err := h.Eventstore.Filter(ctx, query)
- if err != nil {
- return nil, err
- }
-
- for _, event := range events {
- stmt, err := reduce(event)
- if err != nil {
- return nil, err
- }
- previousStmts = append(previousStmts, stmt)
- }
- return previousStmts, nil
-}
-
-func (h *StatementHandler) executeStmts(
- tx *sql.Tx,
- stmts *[]*handler.Statement,
- sequences currentSequences,
-) int {
-
- lastSuccessfulIdx := -1
-stmts:
- for i := 0; i < len(*stmts); i++ {
- stmt := (*stmts)[i]
- for _, sequence := range sequences[stmt.AggregateType] {
- if stmt.Sequence <= sequence.sequence && stmt.InstanceID == sequence.instanceID {
- logging.WithFields("statement", stmt, "currentSequence", sequence).Debug("statement dropped")
- if i < len(*stmts)-1 {
- copy((*stmts)[i:], (*stmts)[i+1:])
- }
- *stmts = (*stmts)[:len(*stmts)-1]
- i--
- continue stmts
- }
- if stmt.PreviousSequence > 0 && stmt.PreviousSequence != sequence.sequence && stmt.InstanceID == sequence.instanceID {
- logging.WithFields("projection", h.ProjectionName, "aggregateType", stmt.AggregateType, "sequence", stmt.Sequence, "prevSeq", stmt.PreviousSequence, "currentSeq", sequence.sequence).Warn("sequences do not match")
- break stmts
- }
- }
- err := h.executeStmt(tx, stmt)
- if err == nil {
- updateSequences(sequences, stmt)
- lastSuccessfulIdx = i
- continue
- }
-
- shouldContinue := h.handleFailedStmt(tx, stmt, err)
- if !shouldContinue {
- break
- }
-
- updateSequences(sequences, stmt)
- lastSuccessfulIdx = i
- continue
- }
- return lastSuccessfulIdx
-}
-
-// executeStmt handles sql statements
-// an error is returned if the statement could not be inserted properly
-func (h *StatementHandler) executeStmt(tx *sql.Tx, stmt *handler.Statement) error {
- if stmt.IsNoop() {
- return nil
- }
- _, err := tx.Exec("SAVEPOINT push_stmt")
- if err != nil {
- return errors.ThrowInternal(err, "CRDB-i1wp6", "unable to create savepoint")
- }
- err = stmt.Execute(tx, h.ProjectionName)
- if err != nil {
- logging.WithError(err).Error()
- _, rollbackErr := tx.Exec("ROLLBACK TO SAVEPOINT push_stmt")
- if rollbackErr != nil {
- return errors.ThrowInternal(rollbackErr, "CRDB-zzp3P", "rollback to savepoint failed")
- }
- return errors.ThrowInternal(err, "CRDB-oRkaN", "unable execute stmt")
- }
- _, err = tx.Exec("RELEASE push_stmt")
- if err != nil {
- return errors.ThrowInternal(err, "CRDB-qWgwT", "unable to release savepoint")
- }
- return nil
-}
-
-func updateSequences(sequences currentSequences, stmt *handler.Statement) {
- for _, sequence := range sequences[stmt.AggregateType] {
- if sequence.instanceID == stmt.InstanceID {
- sequence.sequence = stmt.Sequence
- return
- }
- }
- sequences[stmt.AggregateType] = append(sequences[stmt.AggregateType], &instanceSequence{
- instanceID: stmt.InstanceID,
- sequence: stmt.Sequence,
- })
-}
-
-func appendToInstanceIDs(instances []string, id string) []string {
- for _, instance := range instances {
- if instance == id {
- return instances
- }
- }
- return append(instances, id)
-}
diff --git a/internal/eventstore/handler/crdb/handler_stmt_test.go b/internal/eventstore/handler/crdb/handler_stmt_test.go
deleted file mode 100644
index 027469e71b..0000000000
--- a/internal/eventstore/handler/crdb/handler_stmt_test.go
+++ /dev/null
@@ -1,1817 +0,0 @@
-package crdb
-
-import (
- "context"
- "database/sql"
- "errors"
- "fmt"
- "reflect"
- "testing"
- "time"
-
- "github.com/DATA-DOG/go-sqlmock"
- "github.com/stretchr/testify/assert"
-
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
- es_repo_mock "github.com/zitadel/zitadel/internal/eventstore/repository/mock"
- "github.com/zitadel/zitadel/internal/id"
- "github.com/zitadel/zitadel/internal/repository/pseudo"
-)
-
-var (
- errFilter = errors.New("filter err")
- errReduce = errors.New("reduce err")
-)
-
-var _ eventstore.Event = &testEvent{}
-
-type testEvent struct {
- eventstore.BaseEvent
- sequence uint64
- previousSequence uint64
- aggregateType eventstore.AggregateType
- instanceID string
-}
-
-func (e *testEvent) Sequence() uint64 {
- return e.sequence
-}
-
-func (e *testEvent) Aggregate() eventstore.Aggregate {
- return eventstore.Aggregate{
- Type: e.aggregateType,
- InstanceID: e.instanceID,
- }
-}
-
-func (e *testEvent) PreviousAggregateTypeSequence() uint64 {
- return e.previousSequence
-}
-
-func TestProjectionHandler_SearchQuery(t *testing.T) {
- type want struct {
- SearchQueryBuilder *eventstore.SearchQueryBuilder
- limit uint64
- isErr func(error) bool
- expectations []mockExpectation
- }
- type fields struct {
- sequenceTable string
- projectionName string
- reducers []handler.AggregateReducer
- bulkLimit uint64
- }
- type args struct {
- instanceIDs []string
- }
- tests := []struct {
- name string
- fields fields
- args args
- want want
- }{
- {
- name: "error in current sequence",
- fields: fields{
- sequenceTable: "my_sequences",
- projectionName: "my_projection",
- reducers: failingAggregateReducers("testAgg"),
- bulkLimit: 5,
- },
- args: args{
- instanceIDs: []string{"instanceID1"},
- },
- want: want{
- limit: 0,
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrTxDone)
- },
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequenceErr(false, "my_sequences", "my_projection", []string{"instanceID1"}, sql.ErrTxDone),
- expectRollback(),
- },
- SearchQueryBuilder: nil,
- },
- },
- {
- name: "only aggregates",
- fields: fields{
- sequenceTable: "my_sequences",
- projectionName: "my_projection",
- reducers: failingAggregateReducers("testAgg"),
- bulkLimit: 5,
- },
- args: args{
- instanceIDs: []string{"instanceID1"},
- },
- want: want{
- limit: 5,
- isErr: func(err error) bool {
- return err == nil
- },
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "testAgg", []string{"instanceID1"}),
- expectCommit(),
- },
- SearchQueryBuilder: eventstore.
- NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AllowTimeTravel().
- AddQuery().
- AggregateTypes("testAgg").
- SequenceGreater(5).
- InstanceID("instanceID1").
- Builder().
- Limit(5),
- },
- },
- {
- name: "multiple instances",
- fields: fields{
- sequenceTable: "my_sequences",
- projectionName: "my_projection",
- reducers: failingAggregateReducers("testAgg"),
- bulkLimit: 5,
- },
- args: args{
- instanceIDs: []string{"instanceID1", "instanceID2"},
- },
- want: want{
- limit: 5,
- isErr: func(err error) bool {
- return err == nil
- },
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "testAgg", []string{"instanceID1", "instanceID2"}),
- expectCommit(),
- },
- SearchQueryBuilder: eventstore.
- NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AllowTimeTravel().
- AddQuery().
- AggregateTypes("testAgg").
- SequenceGreater(5).
- InstanceID("instanceID1").
- Or().
- AggregateTypes("testAgg").
- SequenceGreater(5).
- InstanceID("instanceID2").
- Builder().
- Limit(5),
- },
- },
- {
- name: "scheduled pseudo event",
- fields: fields{
- sequenceTable: "my_sequences",
- projectionName: "my_projection",
- reducers: []handler.AggregateReducer{{
- Aggregate: pseudo.AggregateType,
- EventRedusers: []handler.EventReducer{
- {
- Event: pseudo.ScheduledEventType,
- Reduce: testReduceErr(errors.New("should not be called")),
- },
- },
- }},
- bulkLimit: 5,
- },
- args: args{
- instanceIDs: []string{"instanceID1", "instanceID2"},
- },
- want: want{
- limit: 1,
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- client, mock, err := sqlmock.New()
- if err != nil {
- t.Fatal(err)
- }
- defer client.Close()
-
- id.Configure(&id.Config{Identification: id.Identification{PrivateIp: id.PrivateIp{Enabled: true}}})
- h := NewStatementHandler(context.Background(), StatementHandlerConfig{
- ProjectionHandlerConfig: handler.ProjectionHandlerConfig{
- ProjectionName: tt.fields.projectionName,
- },
- SequenceTable: tt.fields.sequenceTable,
- BulkLimit: tt.fields.bulkLimit,
- Client: &database.DB{
- DB: client,
- },
- Reducers: tt.fields.reducers,
- })
-
- for _, expectation := range tt.want.expectations {
- expectation(mock)
- }
-
- query, limit, err := h.searchQuery(context.Background(), tt.args.instanceIDs)
- if !tt.want.isErr(err) {
- t.Errorf("ProjectionHandler.prepareBulkStmts() error = %v", err)
- return
- }
-
- if !reflect.DeepEqual(query, tt.want.SearchQueryBuilder) {
- t.Errorf("unexpected query: expected %v, got %v", tt.want.SearchQueryBuilder, query)
- }
- if tt.want.limit != limit {
- t.Errorf("unexpected limit: got: %d want %d", limit, tt.want.limit)
- }
-
- mock.MatchExpectationsInOrder(true)
- if err := mock.ExpectationsWereMet(); err != nil {
- t.Errorf("expectations not met: %v", err)
- }
- })
- }
-}
-
-func TestStatementHandler_Update(t *testing.T) {
- type fields struct {
- eventstore *eventstore.Eventstore
- aggregates []eventstore.AggregateType
- }
- type want struct {
- expectations []mockExpectation
- isErr func(error) bool
- stmtsLen int
- }
- type args struct {
- ctx context.Context
- stmts []*handler.Statement
- reduce handler.Reduce
- }
- tests := []struct {
- name string
- fields fields
- want want
- args args
- }{
- {
- name: "begin fails",
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewNoOpStatement(&testEvent{
- aggregateType: "agg",
- sequence: 6,
- previousSequence: 0,
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBeginErr(sql.ErrConnDone),
- },
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrConnDone)
- },
- },
- },
- {
- name: "current sequence fails",
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewNoOpStatement(&testEvent{
- aggregateType: "agg",
- sequence: 6,
- previousSequence: 0,
- instanceID: "instanceID",
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequenceErr(false, "my_sequences", "my_projection", []string{"instanceID"}, sql.ErrTxDone),
- expectRollback(),
- },
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrTxDone)
- },
- },
- },
- {
- name: "fetch previous fails",
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).
- ExpectFilterEventsError(errFilter),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewNoOpStatement(&testEvent{
- aggregateType: "agg",
- sequence: 6,
- previousSequence: 0,
- instanceID: "instanceID",
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}),
- expectRollback(),
- },
- isErr: func(err error) bool {
- return errors.Is(err, errFilter)
- },
- stmtsLen: 1,
- },
- },
- {
- name: "no successful stmts",
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "testAgg",
- sequence: 7,
- previousSequence: 6,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}),
- expectCommit(),
- },
- isErr: func(err error) bool {
- return errors.Is(err, handler.ErrSomeStmtsFailed)
- },
- stmtsLen: 1,
- },
- },
- {
- name: "update current sequence fails",
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t),
- ),
- ),
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 7,
- previousSequence: 5,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "agg", []string{"instanceID"}),
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- expectUpdateCurrentSequenceNoRows("my_sequences", "my_projection", 7, "agg", "instanceID"),
- expectRollback(),
- },
- isErr: func(err error) bool {
- return errors.Is(err, errSeqNotUpdated)
- },
- stmtsLen: 1,
- },
- },
- {
- name: "commit fails",
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t),
- ),
- ),
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 7,
- previousSequence: 5,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "agg", []string{"instanceID"}),
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- expectUpdateCurrentSequence("my_sequences", "my_projection", 7, "agg", "instanceID"),
- expectCommitErr(sql.ErrConnDone),
- },
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrConnDone)
- },
- stmtsLen: 1,
- },
- },
- {
- name: "correct",
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewNoOpStatement(&testEvent{
- aggregateType: "testAgg",
- sequence: 7,
- previousSequence: 5,
- instanceID: "instanceID",
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}),
- expectUpdateCurrentSequence("my_sequences", "my_projection", 7, "testAgg", "instanceID"),
- expectCommit(),
- },
- isErr: func(err error) bool {
- return errors.Is(err, nil)
- },
- stmtsLen: 0,
- },
- },
- {
- name: "fetch previous stmts no additional stmts",
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewNoOpStatement(&testEvent{
- aggregateType: "testAgg",
- sequence: 7,
- previousSequence: 0,
- instanceID: "instanceID",
- }),
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}),
- expectUpdateCurrentSequence("my_sequences", "my_projection", 7, "testAgg", "instanceID"),
- expectCommit(),
- },
- isErr: func(err error) bool {
- return errors.Is(err, nil)
- },
- },
- },
- {
- name: "fetch previous stmts additional events",
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- AggregateType: "testAgg",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "instanceID",
- },
- ),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- args: args{
- ctx: context.Background(),
- stmts: []*handler.Statement{
- NewNoOpStatement(&testEvent{
- aggregateType: "testAgg",
- sequence: 7,
- previousSequence: 0,
- instanceID: "instanceID",
- }),
- },
- reduce: testReduce(),
- },
- want: want{
- expectations: []mockExpectation{
- expectBegin(),
- expectCurrentSequence(false, "my_sequences", "my_projection", 5, "testAgg", []string{"instanceID"}),
- expectUpdateCurrentSequence("my_sequences", "my_projection", 7, "testAgg", "instanceID"),
- expectCommit(),
- },
- isErr: func(err error) bool {
- return errors.Is(err, nil)
- },
- stmtsLen: 1,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- client, mock, err := sqlmock.New()
- if err != nil {
- t.Fatal(err)
- }
- defer client.Close()
-
- h := &StatementHandler{
- ProjectionHandler: &handler.ProjectionHandler{
- Handler: handler.Handler{
- Eventstore: tt.fields.eventstore,
- },
- ProjectionName: "my_projection",
- },
- sequenceTable: "my_sequences",
- currentSequenceStmt: fmt.Sprintf(currentSequenceStmtFormat, "my_sequences"),
- updateSequencesBaseStmt: fmt.Sprintf(updateCurrentSequencesStmtFormat, "my_sequences"),
- client: &database.DB{
- DB: client,
- },
- }
-
- h.aggregates = tt.fields.aggregates
-
- for _, expectation := range tt.want.expectations {
- expectation(mock)
- }
-
- index, err := h.Update(tt.args.ctx, tt.args.stmts, tt.args.reduce)
- if !tt.want.isErr(err) {
- t.Errorf("StatementHandler.Update() error = %v", err)
- }
- if err == nil && tt.want.stmtsLen != index {
- t.Errorf("wrong stmts length: want: %d got %d", tt.want.stmtsLen, index)
- }
-
- mock.MatchExpectationsInOrder(true)
- if err := mock.ExpectationsWereMet(); err != nil {
- t.Errorf("expectations not met: %v", err)
- }
- })
- }
-}
-
-func TestProjectionHandler_fetchPreviousStmts(t *testing.T) {
- type args struct {
- ctx context.Context
- stmtSeq uint64
- sequences currentSequences
- reduce handler.Reduce
- }
- type want struct {
- stmtCount int
- isErr func(error) bool
- }
- type fields struct {
- eventstore *eventstore.Eventstore
- aggregates []eventstore.AggregateType
- }
- tests := []struct {
- name string
- args args
- fields fields
- want want
- }{
- {
- name: "no queries",
- args: args{
- ctx: context.Background(),
- reduce: testReduce(),
- },
- fields: fields{
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, nil)
- },
- stmtCount: 0,
- },
- },
- {
- name: "eventstore returns err",
- args: args{
- ctx: context.Background(),
- reduce: testReduce(),
- sequences: currentSequences{
- "testAgg": []*instanceSequence{
- {sequence: 5},
- },
- },
- stmtSeq: 6,
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEventsError(errFilter),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, errFilter)
- },
- stmtCount: 0,
- },
- },
- {
- name: "no events found",
- args: args{
- ctx: context.Background(),
- reduce: testReduce(),
- sequences: currentSequences{
- "testAgg": []*instanceSequence{
- {sequence: 5},
- },
- },
- stmtSeq: 6,
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- want: want{
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- {
- name: "found events",
- args: args{
- ctx: context.Background(),
- reduce: testReduce(),
- sequences: currentSequences{
- "testAgg": []*instanceSequence{
- {sequence: 5},
- },
- },
- stmtSeq: 10,
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 7,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- &repository.Event{
- ID: "id",
- Sequence: 9,
- PreviousAggregateSequence: 7,
- CreationDate: time.Now(),
- Type: "test.changed",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- want: want{
- stmtCount: 2,
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- {
- name: "reduce fails",
- args: args{
- ctx: context.Background(),
- reduce: testReduceErr(errReduce),
- sequences: currentSequences{
- "testAgg": []*instanceSequence{
- {sequence: 5},
- },
- },
- stmtSeq: 10,
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 7,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ),
- ),
- ),
- aggregates: []eventstore.AggregateType{"testAgg"},
- },
- want: want{
- stmtCount: 0,
- isErr: func(err error) bool {
- return errors.Is(err, errReduce)
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &StatementHandler{
- aggregates: tt.fields.aggregates,
- }
- h.ProjectionHandler = &handler.ProjectionHandler{
- Handler: handler.Handler{
- Eventstore: tt.fields.eventstore,
- },
- ProjectionName: "my_projection",
- }
- stmts, err := h.fetchPreviousStmts(tt.args.ctx, nil, tt.args.stmtSeq, "", tt.args.sequences, tt.args.reduce)
- if !tt.want.isErr(err) {
- t.Errorf("ProjectionHandler.prepareBulkStmts() error = %v", err)
- return
- }
- if tt.want.stmtCount != len(stmts) {
- t.Errorf("unexpected length of stmts: got: %d want %d", len(stmts), tt.want.stmtCount)
- }
- })
- }
-}
-
-func TestStatementHandler_executeStmts(t *testing.T) {
- type fields struct {
- projectionName string
- maxFailureCount uint
- failedEventsTable string
- }
- type args struct {
- stmts []*handler.Statement
- sequences currentSequences
- }
- type want struct {
- expectations []mockExpectation
- idx int
- }
- tests := []struct {
- name string
- fields fields
- args args
- want want
- }{
- {
- name: "already inserted",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 5,
- previousSequence: 2,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val1",
- },
- }),
- },
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {sequence: 5},
- },
- },
- },
- want: want{
- expectations: []mockExpectation{},
- idx: -1,
- },
- },
- {
- name: "previous sequence higher than sequence",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 5,
- previousSequence: 0,
- },
- []handler.Column{
- {
- Name: "col1",
- Value: "val1",
- },
- }),
- NewCreateStatement(
-
- &testEvent{
- aggregateType: "agg",
- sequence: 8,
- previousSequence: 7,
- },
- []handler.Column{
- {
- Name: "col2",
- Value: "val2",
- },
- }),
- },
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {sequence: 2},
- },
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectSavePoint(),
- expectCreate("my_projection", []string{"col1"}, []string{"$1"}),
- expectSavePointRelease(),
- },
- idx: 0,
- },
- },
- {
- name: "execute fails not continue",
- fields: fields{
- projectionName: "my_projection",
- maxFailureCount: 5,
- failedEventsTable: "failed_events",
- },
- args: args{
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 5,
- previousSequence: 0,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 6,
- previousSequence: 5,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 7,
- previousSequence: 6,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {sequence: 2},
- },
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- expectSavePoint(),
- expectCreateErr("my_projection", []string{"col"}, []string{"$1"}, sql.ErrConnDone),
- expectSavePointRollback(),
- expectFailureCount("failed_events", "my_projection", "instanceID", 6, 3),
- expectUpdateFailureCount("failed_events", "my_projection", "instanceID", 6, 4),
- },
- idx: 0,
- },
- },
- {
- name: "execute fails continue",
- fields: fields{
- projectionName: "my_projection",
- maxFailureCount: 5,
- failedEventsTable: "failed_events",
- },
- args: args{
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 5,
- previousSequence: 0,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col1",
- Value: "val1",
- },
- }),
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 6,
- previousSequence: 5,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col2",
- Value: "val2",
- },
- }),
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 7,
- previousSequence: 6,
- instanceID: "instanceID",
- },
- []handler.Column{
- {
- Name: "col3",
- Value: "val3",
- },
- }),
- },
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {sequence: 2},
- },
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectSavePoint(),
- expectCreate("my_projection", []string{"col1"}, []string{"$1"}),
- expectSavePointRelease(),
- expectSavePoint(),
- expectCreateErr("my_projection", []string{"col2"}, []string{"$1"}, sql.ErrConnDone),
- expectSavePointRollback(),
- expectFailureCount("failed_events", "my_projection", "instanceID", 6, 4),
- expectUpdateFailureCount("failed_events", "my_projection", "instanceID", 6, 5),
- expectSavePoint(),
- expectCreate("my_projection", []string{"col3"}, []string{"$1"}),
- expectSavePointRelease(),
- },
- idx: 2,
- },
- },
- {
- name: "correct",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmts: []*handler.Statement{
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 5,
- previousSequence: 0,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 6,
- previousSequence: 5,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 7,
- previousSequence: 6,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- NewMultiStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 8,
- previousSequence: 7,
- },
- AddCreateStatement(
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- },
- ),
- AddCreateStatement(
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- },
- ),
- ),
- },
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {sequence: 2},
- },
- },
- },
- want: want{
- expectations: []mockExpectation{
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- },
- idx: 3,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- client, mock, err := sqlmock.New()
- if err != nil {
- t.Fatal(err)
- }
- defer client.Close()
-
- h := NewStatementHandler(
- context.Background(),
- StatementHandlerConfig{
- ProjectionHandlerConfig: handler.ProjectionHandlerConfig{
- HandlerConfig: handler.HandlerConfig{
- Eventstore: nil,
- },
- ProjectionName: tt.fields.projectionName,
- RequeueEvery: 0,
- },
- Client: &database.DB{
- DB: client,
- },
- FailedEventsTable: tt.fields.failedEventsTable,
- MaxFailureCount: tt.fields.maxFailureCount,
- },
- )
-
- mock.ExpectBegin()
-
- for _, expectation := range tt.want.expectations {
- expectation(mock)
- }
-
- mock.ExpectCommit()
-
- tx, err := client.Begin()
- if err != nil {
- t.Fatalf("unexpected err in begin: %v", err)
- }
-
- idx := h.executeStmts(tx, &tt.args.stmts, tt.args.sequences)
- if idx != tt.want.idx {
- t.Errorf("unexpected index want: %d got %d", tt.want.idx, idx)
- }
-
- if err := tx.Commit(); err != nil {
- t.Fatalf("unexpected err in commit: %v", err)
- }
-
- if err := mock.ExpectationsWereMet(); err != nil {
- t.Errorf("expectations not met: %v", err)
- }
- })
- }
-}
-
-func TestStatementHandler_executeStmt(t *testing.T) {
- type fields struct {
- projectionName string
- }
- type args struct {
- stmt *handler.Statement
- }
- type want struct {
- expectations []mockExpectation
- isErr func(error) bool
- }
- tests := []struct {
- name string
- fields fields
- args args
- want want
- }{
- {
- name: "create savepoint fails",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmt: NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 1,
- previousSequence: 0,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrConnDone)
- },
- expectations: []mockExpectation{
- expectSavePointErr(sql.ErrConnDone),
- },
- },
- },
- {
- name: "execute fails",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmt: NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 1,
- previousSequence: 0,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrNoRows)
- },
- expectations: []mockExpectation{
- expectSavePoint(),
- expectCreateErr("my_projection", []string{"col"}, []string{"$1"}, sql.ErrNoRows),
- expectSavePointRollback(),
- },
- },
- },
- {
- name: "rollback savepoint fails",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmt: NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 1,
- previousSequence: 0,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrConnDone)
- },
- expectations: []mockExpectation{
- expectSavePoint(),
- expectCreateErr("my_projection", []string{"col"}, []string{"$1"}, sql.ErrNoRows),
- expectSavePointRollbackErr(sql.ErrConnDone),
- },
- },
- },
- {
- name: "no op",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmt: NewNoOpStatement(&testEvent{
- aggregateType: "agg",
- sequence: 1,
- previousSequence: 0,
- }),
- },
- want: want{
- isErr: func(err error) bool {
- return err == nil
- },
- expectations: []mockExpectation{},
- },
- },
- {
- name: "with op",
- fields: fields{
- projectionName: "my_projection",
- },
- args: args{
- stmt: NewCreateStatement(
- &testEvent{
- aggregateType: "agg",
- sequence: 1,
- previousSequence: 0,
- },
- []handler.Column{
- {
- Name: "col",
- Value: "val",
- },
- }),
- },
- want: want{
- isErr: func(err error) bool {
- return err == nil
- },
- expectations: []mockExpectation{
- expectSavePoint(),
- expectCreate("my_projection", []string{"col"}, []string{"$1"}),
- expectSavePointRelease(),
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &StatementHandler{
- ProjectionHandler: &handler.ProjectionHandler{
- ProjectionName: tt.fields.projectionName,
- },
- }
-
- client, mock, err := sqlmock.New()
- if err != nil {
- t.Fatal(err)
- }
- defer client.Close()
-
- mock.ExpectBegin()
-
- for _, expectation := range tt.want.expectations {
- expectation(mock)
- }
-
- mock.ExpectCommit()
-
- tx, err := client.Begin()
- if err != nil {
- t.Fatalf("unexpected err in begin: %v", err)
- }
-
- err = h.executeStmt(tx, tt.args.stmt)
- if !tt.want.isErr(err) {
- t.Errorf("unexpected error: %v", err)
- }
-
- if err = tx.Commit(); err != nil {
- t.Fatalf("unexpected err in begin: %v", err)
- }
-
- mock.MatchExpectationsInOrder(true)
- if err := mock.ExpectationsWereMet(); err != nil {
- t.Errorf("expectations not met: %v", err)
- }
- })
- }
-}
-
-func TestStatementHandler_currentSequence(t *testing.T) {
- type fields struct {
- sequenceTable string
- projectionName string
- aggregates []eventstore.AggregateType
- }
- type args struct {
- stmt handler.Statement
- instanceIDs []string
- }
- type want struct {
- expectations []mockExpectation
- isErr func(error) bool
- sequences currentSequences
- }
- tests := []struct {
- name string
- fields fields
- args args
- want want
- }{
- {
- name: "error in query",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- },
- args: args{
- stmt: handler.Statement{},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrConnDone)
- },
- expectations: []mockExpectation{
- expectCurrentSequenceErr(true, "my_table", "my_projection", nil, sql.ErrConnDone),
- },
- },
- },
- {
- name: "no rows",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- stmt: handler.Statement{},
- instanceIDs: []string{"instanceID"},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, nil)
- },
- expectations: []mockExpectation{
- expectCurrentSequenceNoRows("my_table", "my_projection", []string{"instanceID"}),
- },
- sequences: currentSequences{},
- },
- },
- {
- name: "scan err",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- stmt: handler.Statement{},
- instanceIDs: []string{"instanceID"},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrTxDone)
- },
- expectations: []mockExpectation{
- expectCurrentSequenceScanErr("my_table", "my_projection", []string{"instanceID"}),
- },
- sequences: currentSequences{},
- },
- },
- {
- name: "found",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- stmt: handler.Statement{},
- instanceIDs: []string{"instanceID"},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, nil)
- },
- expectations: []mockExpectation{
- expectCurrentSequence(true, "my_table", "my_projection", 5, "agg", []string{"instanceID"}),
- },
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {
- sequence: 5,
- instanceID: "instanceID",
- },
- },
- },
- },
- },
- {
- name: "multiple found",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- stmt: handler.Statement{},
- instanceIDs: []string{"instanceID1", "instanceID2"},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, nil)
- },
- expectations: []mockExpectation{
- expectCurrentSequence(true, "my_table", "my_projection", 5, "agg", []string{"instanceID1", "instanceID2"}),
- },
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {
- sequence: 5,
- instanceID: "instanceID1",
- },
- {
- sequence: 5,
- instanceID: "instanceID2",
- },
- },
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &StatementHandler{
- ProjectionHandler: &handler.ProjectionHandler{
- ProjectionName: tt.fields.projectionName,
- },
- sequenceTable: tt.fields.sequenceTable,
- currentSequenceStmt: fmt.Sprintf(currentSequenceStmtFormat, tt.fields.sequenceTable),
- }
-
- h.aggregates = tt.fields.aggregates
-
- client, mock, err := sqlmock.New()
- if err != nil {
- t.Fatal(err)
- }
- defer client.Close()
-
- mock.ExpectBegin()
-
- for _, expectation := range tt.want.expectations {
- expectation(mock)
- }
-
- mock.ExpectCommit()
-
- tx, err := client.Begin()
- if err != nil {
- t.Fatalf("unexpected err in begin: %v", err)
- }
-
- seq, err := h.currentSequences(context.Background(), true, (&transaction{Tx: tx}).QueryContext, tt.args.instanceIDs)
- if !tt.want.isErr(err) {
- t.Errorf("unexpected error: %v", err)
- }
-
- if err = tx.Commit(); err != nil {
- t.Fatalf("unexpected err in commit: %v", err)
- }
-
- mock.MatchExpectationsInOrder(true)
- if err := mock.ExpectationsWereMet(); err != nil {
- t.Errorf("expectations not met: %v", err)
- }
-
- for _, aggregateType := range tt.fields.aggregates {
- assert.Equal(t, tt.want.sequences[aggregateType], seq[aggregateType])
- }
- })
- }
-}
-
-func TestStatementHandler_updateCurrentSequence(t *testing.T) {
- type fields struct {
- sequenceTable string
- projectionName string
- aggregates []eventstore.AggregateType
- }
- type args struct {
- sequences currentSequences
- }
- type want struct {
- expectations []mockExpectation
- isErr func(error) bool
- }
- tests := []struct {
- name string
- fields fields
- args args
- want want
- }{
- {
- name: "update sequence fails",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {
- sequence: 5,
- instanceID: "instanceID",
- },
- },
- },
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, sql.ErrConnDone)
- },
- expectations: []mockExpectation{
- expectUpdateCurrentSequenceErr("my_table", "my_projection", 5, sql.ErrConnDone, "agg", "instanceID"),
- },
- },
- },
- {
- name: "update sequence returns no rows",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {
- sequence: 5,
- instanceID: "instanceID",
- },
- },
- },
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, errSeqNotUpdated)
- },
- expectations: []mockExpectation{
- expectUpdateCurrentSequenceNoRows("my_table", "my_projection", 5, "agg", "instanceID"),
- },
- },
- },
- {
- name: "correct",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {
- sequence: 5,
- instanceID: "instanceID",
- },
- },
- },
- },
- want: want{
- isErr: func(err error) bool {
- return err == nil
- },
- expectations: []mockExpectation{
- expectUpdateCurrentSequence("my_table", "my_projection", 5, "agg", "instanceID"),
- },
- },
- },
- {
- name: "multiple sequences",
- fields: fields{
- sequenceTable: "my_table",
- projectionName: "my_projection",
- aggregates: []eventstore.AggregateType{"agg"},
- },
- args: args{
- sequences: currentSequences{
- "agg": []*instanceSequence{
- {
- sequence: 5,
- instanceID: "instanceID",
- },
- },
- "agg2": []*instanceSequence{
- {
- sequence: 6,
- instanceID: "instanceID",
- },
- {
- sequence: 10,
- instanceID: "instanceID2",
- },
- },
- },
- },
- want: want{
- isErr: func(err error) bool {
- return err == nil
- },
- expectations: []mockExpectation{
- expectUpdateThreeCurrentSequence(t, "my_table", "my_projection", currentSequences{
- "agg": []*instanceSequence{
- {
- sequence: 5,
- instanceID: "instanceID",
- },
- },
- "agg2": []*instanceSequence{
- {
- sequence: 6,
- instanceID: "instanceID",
- },
- {
- sequence: 10,
- instanceID: "instanceID2",
- },
- },
- }),
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
-
- h := &StatementHandler{
- ProjectionHandler: &handler.ProjectionHandler{
- ProjectionName: tt.fields.projectionName,
- },
- sequenceTable: tt.fields.sequenceTable,
- updateSequencesBaseStmt: fmt.Sprintf(updateCurrentSequencesStmtFormat, tt.fields.sequenceTable),
- }
-
- h.aggregates = tt.fields.aggregates
-
- client, mock, err := sqlmock.New()
- if err != nil {
- t.Fatal(err)
- }
- defer client.Close()
-
- mock.ExpectBegin()
- for _, expectation := range tt.want.expectations {
- expectation(mock)
- }
- mock.ExpectCommit()
-
- tx, err := client.Begin()
- if err != nil {
- t.Fatalf("unexpected error in begin: %v", err)
- }
-
- err = h.updateCurrentSequences(tx, tt.args.sequences)
- if !tt.want.isErr(err) {
- t.Errorf("unexpected error: %v", err)
- }
-
- err = tx.Commit()
- if err != nil {
- t.Fatalf("unexpected error in commit: %v", err)
- }
-
- mock.MatchExpectationsInOrder(true)
- if err := mock.ExpectationsWereMet(); err != nil {
- t.Errorf("expectations not met: %v", err)
- }
- })
- }
-}
-
-func testReduce() handler.Reduce {
- return func(event eventstore.Event) (*handler.Statement, error) {
- return NewNoOpStatement(event), nil
- }
-}
-
-func testReduceErr(err error) handler.Reduce {
- return func(event eventstore.Event) (*handler.Statement, error) {
- return nil, err
- }
-}
-
-func failingAggregateReducers(aggregates ...eventstore.AggregateType) []handler.AggregateReducer {
- reducers := make([]handler.AggregateReducer, len(aggregates))
- for idx := range aggregates {
- reducers[idx] = handler.AggregateReducer{
- Aggregate: aggregates[idx],
- EventRedusers: []handler.EventReducer{{
- Event: "any.event",
- Reduce: testReduceErr(errors.New("should not be called")),
- }},
- }
- }
- return reducers
-}
diff --git a/internal/eventstore/handler/crdb/init_test.go b/internal/eventstore/handler/crdb/init_test.go
deleted file mode 100644
index 1e7e6bd823..0000000000
--- a/internal/eventstore/handler/crdb/init_test.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package crdb
-
-import "testing"
-
-func Test_defaultValue(t *testing.T) {
- type args struct {
- value interface{}
- }
- tests := []struct {
- name string
- args args
- want string
- }{
- {
- name: "string",
- args: args{
- value: "asdf",
- },
- want: "'asdf'",
- },
- {
- name: "primitive non string",
- args: args{
- value: 1,
- },
- want: "1",
- },
- {
- name: "stringer",
- args: args{
- value: testStringer(0),
- },
- want: "0",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if got := defaultValue(tt.args.value); got != tt.want {
- t.Errorf("defaultValue() = %v, want %v", got, tt.want)
- }
- })
- }
-}
-
-type testStringer int
-
-func (t testStringer) String() string {
- return "0529958243"
-}
diff --git a/internal/eventstore/handler/crdb/lock.go b/internal/eventstore/handler/crdb/lock.go
index d101a34091..e751eff2a2 100644
--- a/internal/eventstore/handler/crdb/lock.go
+++ b/internal/eventstore/handler/crdb/lock.go
@@ -91,7 +91,7 @@ func (h *locker) Unlock(instanceIDs ...string) error {
return nil
}
-func (h *locker) lockStatement(lockDuration time.Duration, instanceIDs database.StringArray) (string, []interface{}) {
+func (h *locker) lockStatement(lockDuration time.Duration, instanceIDs database.TextArray[string]) (string, []interface{}) {
valueQueries := make([]string, len(instanceIDs))
values := make([]interface{}, len(instanceIDs)+4)
values[0] = h.workerName
diff --git a/internal/eventstore/handler/crdb/lock_test.go b/internal/eventstore/handler/crdb/lock_test.go
index fe18253b5b..5ab824ee66 100644
--- a/internal/eventstore/handler/crdb/lock_test.go
+++ b/internal/eventstore/handler/crdb/lock_test.go
@@ -158,7 +158,7 @@ func TestStatementHandler_renewLock(t *testing.T) {
},
args: args{
lockDuration: 1 * time.Second,
- instanceIDs: database.StringArray{"instanceID"},
+ instanceIDs: database.TextArray[string]{"instanceID"},
},
},
{
@@ -173,7 +173,7 @@ func TestStatementHandler_renewLock(t *testing.T) {
},
args: args{
lockDuration: 2 * time.Second,
- instanceIDs: database.StringArray{"instanceID"},
+ instanceIDs: database.TextArray[string]{"instanceID"},
},
},
{
@@ -188,7 +188,7 @@ func TestStatementHandler_renewLock(t *testing.T) {
},
args: args{
lockDuration: 3 * time.Second,
- instanceIDs: database.StringArray{"instanceID"},
+ instanceIDs: database.TextArray[string]{"instanceID"},
},
},
{
diff --git a/internal/eventstore/handler/crdb/reduce.go b/internal/eventstore/handler/crdb/reduce.go
deleted file mode 100644
index bda49c5a1e..0000000000
--- a/internal/eventstore/handler/crdb/reduce.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package crdb
-
-import (
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
-)
-
-//reduce implements handler.Reduce function
-func (h *StatementHandler) reduce(event eventstore.Event) (*handler.Statement, error) {
- reduce, ok := h.reduces[event.Type()]
- if !ok {
- return NewNoOpStatement(event), nil
- }
-
- return reduce(event)
-}
diff --git a/internal/eventstore/handler/handler.go b/internal/eventstore/handler/handler.go
deleted file mode 100644
index 1944cfd0ba..0000000000
--- a/internal/eventstore/handler/handler.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package handler
-
-import (
- "github.com/zitadel/zitadel/internal/eventstore"
-)
-
-type HandlerConfig struct {
- Eventstore *eventstore.Eventstore
-}
-type Handler struct {
- Eventstore *eventstore.Eventstore
- Sub *eventstore.Subscription
- EventQueue chan eventstore.Event
-}
-
-func NewHandler(config HandlerConfig) Handler {
- return Handler{
- Eventstore: config.Eventstore,
- EventQueue: make(chan eventstore.Event, 100),
- }
-}
-
-func (h *Handler) Subscribe(aggregates ...eventstore.AggregateType) {
- h.Sub = eventstore.SubscribeAggregates(h.EventQueue, aggregates...)
-}
-
-func (h *Handler) SubscribeEvents(types map[eventstore.AggregateType][]eventstore.EventType) {
- h.Sub = eventstore.SubscribeEventTypes(h.EventQueue, types)
-}
-
-func (h *Handler) Unsubscribe() {
- if h.Sub == nil {
- return
- }
- h.Sub.Unsubscribe()
-}
diff --git a/internal/eventstore/handler/handler_projection.go b/internal/eventstore/handler/handler_projection.go
deleted file mode 100644
index 2dbcfc9aa0..0000000000
--- a/internal/eventstore/handler/handler_projection.go
+++ /dev/null
@@ -1,396 +0,0 @@
-package handler
-
-import (
- "context"
- "errors"
- "runtime/debug"
- "time"
-
- "github.com/sirupsen/logrus"
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/api/authz"
- "github.com/zitadel/zitadel/internal/api/call"
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/repository/pseudo"
-)
-
-const (
- schedulerSucceeded = eventstore.EventType("system.projections.scheduler.succeeded")
- aggregateType = eventstore.AggregateType("system")
- aggregateID = "SYSTEM"
-)
-
-type ProjectionHandlerConfig struct {
- HandlerConfig
- ProjectionName string
- RequeueEvery time.Duration
- RetryFailedAfter time.Duration
- Retries uint
- ConcurrentInstances uint
- HandleActiveInstances time.Duration
-}
-
-// Update updates the projection with the given statements
-type Update func(context.Context, []*Statement, Reduce) (index int, err error)
-
-// Reduce reduces the given event to a statement
-// which is used to update the projection
-type Reduce func(eventstore.Event) (*Statement, error)
-
-// SearchQuery generates the search query to lookup for events
-type SearchQuery func(ctx context.Context, instanceIDs []string) (query *eventstore.SearchQueryBuilder, queryLimit uint64, err error)
-
-// Lock is used for mutex handling if needed on the projection
-type Lock func(context.Context, time.Duration, ...string) <-chan error
-
-// Unlock releases the mutex of the projection
-type Unlock func(...string) error
-
-// NowFunc makes time.Now() mockable
-type NowFunc func() time.Time
-
-type ProjectionHandler struct {
- Handler
- ProjectionName string
- reduce Reduce
- update Update
- searchQuery SearchQuery
- triggerProjection *time.Timer
- lock Lock
- unlock Unlock
- requeueAfter time.Duration
- retryFailedAfter time.Duration
- retries int
- concurrentInstances int
- handleActiveInstances time.Duration
- nowFunc NowFunc
- reduceScheduledPseudoEvent bool
-}
-
-func NewProjectionHandler(
- ctx context.Context,
- config ProjectionHandlerConfig,
- reduce Reduce,
- update Update,
- query SearchQuery,
- lock Lock,
- unlock Unlock,
- initialized <-chan bool,
- reduceScheduledPseudoEvent bool,
-) *ProjectionHandler {
- concurrentInstances := int(config.ConcurrentInstances)
- if concurrentInstances < 1 {
- concurrentInstances = 1
- }
- h := &ProjectionHandler{
- Handler: NewHandler(config.HandlerConfig),
- ProjectionName: config.ProjectionName,
- reduce: reduce,
- update: update,
- searchQuery: query,
- lock: lock,
- unlock: unlock,
- requeueAfter: config.RequeueEvery,
- triggerProjection: time.NewTimer(0), // first trigger is instant on startup
- retryFailedAfter: config.RetryFailedAfter,
- retries: int(config.Retries),
- concurrentInstances: concurrentInstances,
- handleActiveInstances: config.HandleActiveInstances,
- nowFunc: time.Now,
- reduceScheduledPseudoEvent: reduceScheduledPseudoEvent,
- }
-
- go func() {
- <-initialized
- if !h.reduceScheduledPseudoEvent {
- go h.subscribe(ctx)
- }
- go h.schedule(ctx)
- }()
-
- return h
-}
-
-func triggerInstances(ctx context.Context, instances []string) []string {
- if len(instances) == 0 {
- instances = append(instances, authz.GetInstance(ctx).InstanceID())
- }
- return instances
-}
-
-// Trigger handles all events for the provided instances (or current instance from context if non specified)
-// by calling FetchEvents and Process until the amount of events is smaller than the BulkLimit.
-// If a bulk action was executed, the call timestamp in context will be reset for subsequent queries.
-// The returned context is never nil. It is either the original context or an updated context.
-//
-// If Trigger encounters an error, it is only logged. If the error is important for the caller,
-// use TriggerErr instead.
-func (h *ProjectionHandler) Trigger(ctx context.Context, instances ...string) context.Context {
- instances = triggerInstances(ctx, instances)
- ctx, err := h.TriggerErr(ctx, instances...)
- logging.OnError(err).WithFields(logrus.Fields{
- "projection": h.ProjectionName,
- "instanceIDs": instances,
- }).Error("trigger failed")
- return ctx
-}
-
-// TriggerErr handles all events for the provided instances (or current instance from context if non specified)
-// by calling FetchEvents and Process until the amount of events is smaller than the BulkLimit.
-// If a bulk action was executed, the call timestamp in context will be reset for subsequent queries.
-// The returned context is never nil. It is either the original context or an updated context.
-func (h *ProjectionHandler) TriggerErr(ctx context.Context, instances ...string) (outCtx context.Context, err error) {
- instances = triggerInstances(ctx, instances)
- defer func() {
- outCtx = call.ResetTimestamp(ctx)
- }()
- for {
- events, hasLimitExceeded, err := h.FetchEvents(ctx, instances...)
- if err != nil {
- return ctx, err
- }
- if len(events) == 0 {
- return ctx, nil
- }
- _, err = h.Process(ctx, events...)
- if err != nil {
- return ctx, err
- }
- if !hasLimitExceeded {
- return ctx, nil
- }
- }
-}
-
-// Process handles multiple events by reducing them to statements and updating the projection
-func (h *ProjectionHandler) Process(ctx context.Context, events ...eventstore.Event) (index int, err error) {
- if len(events) == 0 {
- return 0, nil
- }
- index = -1
- statements := make([]*Statement, len(events))
- for i, event := range events {
- statements[i], err = h.reduce(event)
- if err != nil {
- return index, err
- }
- }
- for retry := 0; retry <= h.retries; retry++ {
- index, err = h.update(ctx, statements[index+1:], h.reduce)
- if err != nil && !errors.Is(err, ErrSomeStmtsFailed) {
- return index, err
- }
- if err == nil {
- return index, nil
- }
- time.Sleep(h.retryFailedAfter)
- }
- return index, err
-}
-
-// FetchEvents checks the current sequences and filters for newer events
-func (h *ProjectionHandler) FetchEvents(ctx context.Context, instances ...string) ([]eventstore.Event, bool, error) {
- if h.reduceScheduledPseudoEvent {
- return h.fetchPseudoEvents(ctx, instances...)
- }
- return h.fetchDBEvents(ctx, instances...)
-}
-
-func (h *ProjectionHandler) fetchDBEvents(ctx context.Context, instances ...string) ([]eventstore.Event, bool, error) {
- eventQuery, eventsLimit, err := h.searchQuery(ctx, instances)
- if err != nil {
- return nil, false, err
- }
- events, err := h.Eventstore.Filter(ctx, eventQuery)
- if err != nil {
- return nil, false, err
- }
- return events, int(eventsLimit) == len(events), err
-}
-
-func (h *ProjectionHandler) fetchPseudoEvents(ctx context.Context, instances ...string) ([]eventstore.Event, bool, error) {
- return []eventstore.Event{pseudo.NewScheduledEvent(ctx, time.Now(), instances...)}, false, nil
-}
-
-func (h *ProjectionHandler) subscribe(ctx context.Context) {
- ctx, cancel := context.WithCancel(ctx)
- defer func() {
- err := recover()
- if err != nil {
- h.Handler.Unsubscribe()
- logging.WithFields("projection", h.ProjectionName).Errorf("subscription panicked: %v", err)
- }
- cancel()
- }()
- for firstEvent := range h.EventQueue {
- events := checkAdditionalEvents(h.EventQueue, firstEvent)
-
- index, err := h.Process(ctx, events...)
- if err != nil || index < len(events)-1 {
- logging.WithFields("projection", h.ProjectionName).WithError(err).Warn("unable to process all events from subscription")
- }
- }
-}
-
-func (h *ProjectionHandler) schedule(ctx context.Context) {
- ctx, cancel := context.WithCancel(ctx)
- defer func() {
- err := recover()
- if err != nil {
- logging.WithFields("projection", h.ProjectionName, "cause", err, "stack", string(debug.Stack())).Error("schedule panicked")
- }
- cancel()
- }()
- // flag if projection has been successfully executed at least once since start
- var succeededOnce bool
- var err error
- // get every instance id except empty (system)
- query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsInstanceIDs).AllowTimeTravel().AddQuery().ExcludedInstanceID("")
- for range h.triggerProjection.C {
- if !succeededOnce {
- // (re)check if it has succeeded in the meantime
- succeededOnce, err = h.hasSucceededOnce(ctx)
- if err != nil {
- logging.WithFields("projection", h.ProjectionName, "err", err).
- Error("schedule could not check if projection has already succeeded once")
- h.triggerProjection.Reset(h.requeueAfter)
- continue
- }
- }
- lockCtx := ctx
- var cancelLock context.CancelFunc
- // if it still has not succeeded, lock the projection for the system
- // so that only a single scheduler does a first schedule (of every instance)
- if !succeededOnce {
- lockCtx, cancelLock = context.WithCancel(ctx)
- errs := h.lock(lockCtx, h.requeueAfter, "system")
- if err, ok := <-errs; err != nil || !ok {
- cancelLock()
- logging.WithFields("projection", h.ProjectionName).OnError(err).Debug("initial lock failed for first schedule")
- h.triggerProjection.Reset(h.requeueAfter)
- continue
- }
- go h.cancelOnErr(lockCtx, errs, cancelLock)
- }
- if succeededOnce {
- // since we have at least one successful run, we can restrict it to events not older than
- // h.handleActiveInstances (just to be sure not to miss an event)
- // This ensures that only instances with recent events on the handler are projected
- query = query.CreationDateAfter(h.nowFunc().Add(-1 * h.handleActiveInstances))
- }
- ids, err := h.Eventstore.InstanceIDs(ctx, h.requeueAfter, !succeededOnce, query.Builder())
- if err != nil {
- logging.WithFields("projection", h.ProjectionName).WithError(err).Error("instance ids")
- h.triggerProjection.Reset(h.requeueAfter)
- continue
- }
- var failed bool
- for i := 0; i < len(ids); i = i + h.concurrentInstances {
- max := i + h.concurrentInstances
- if max > len(ids) {
- max = len(ids)
- }
- instances := ids[i:max]
- lockInstanceCtx, cancelInstanceLock := context.WithCancel(lockCtx)
- errs := h.lock(lockInstanceCtx, h.requeueAfter, instances...)
- //wait until projection is locked
- if err, ok := <-errs; err != nil || !ok {
- cancelInstanceLock()
- logging.WithFields("projection", h.ProjectionName).OnError(err).Debug("initial lock failed")
- failed = true
- continue
- }
- go h.cancelOnErr(lockInstanceCtx, errs, cancelInstanceLock)
- _, err = h.TriggerErr(lockInstanceCtx, instances...)
- if err != nil {
- logging.WithFields("projection", h.ProjectionName, "instanceIDs", instances).WithError(err).Error("trigger failed")
- failed = true
- }
-
- cancelInstanceLock()
- unlockErr := h.unlock(instances...)
- logging.WithFields("projection", h.ProjectionName).OnError(unlockErr).Warn("unable to unlock")
- }
- // if the first schedule did not fail, store that in the eventstore, so we can check on later starts
- if !succeededOnce {
- if !failed {
- err = h.setSucceededOnce(ctx)
- logging.WithFields("projection", h.ProjectionName).OnError(err).Warn("unable to push first schedule succeeded")
- }
- cancelLock()
- unlockErr := h.unlock("system")
- logging.WithFields("projection", h.ProjectionName).OnError(unlockErr).Warn("unable to unlock first schedule")
- }
- // it succeeded at least once if it has succeeded before or if it has succeeded now - not failed ;-)
- succeededOnce = succeededOnce || !failed
- h.triggerProjection.Reset(h.requeueAfter)
- }
-}
-
-func (h *ProjectionHandler) hasSucceededOnce(ctx context.Context) (bool, error) {
- events, err := h.Eventstore.Filter(ctx, eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes(aggregateType).
- AggregateIDs(aggregateID).
- EventTypes(schedulerSucceeded).
- EventData(map[string]interface{}{
- "name": h.ProjectionName,
- }).
- Builder(),
- )
- return len(events) > 0 && err == nil, err
-}
-
-func (h *ProjectionHandler) setSucceededOnce(ctx context.Context) error {
- _, err := h.Eventstore.Push(ctx, &ProjectionSucceededEvent{
- BaseEvent: *eventstore.NewBaseEventForPush(ctx,
- eventstore.NewAggregate(ctx, aggregateID, aggregateType, "v1"),
- schedulerSucceeded,
- ),
- Name: h.ProjectionName,
- })
- return err
-}
-
-type ProjectionSucceededEvent struct {
- eventstore.BaseEvent `json:"-"`
- Name string `json:"name"`
-}
-
-func (p *ProjectionSucceededEvent) Data() interface{} {
- return p
-}
-
-func (p *ProjectionSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return nil
-}
-
-func (h *ProjectionHandler) cancelOnErr(ctx context.Context, errs <-chan error, cancel func()) {
- for {
- select {
- case err := <-errs:
- if err != nil {
- logging.WithFields("projection", h.ProjectionName).WithError(err).Warn("bulk canceled")
- cancel()
- return
- }
- case <-ctx.Done():
- cancel()
- return
- }
- }
-}
-
-func checkAdditionalEvents(eventQueue chan eventstore.Event, event eventstore.Event) []eventstore.Event {
- events := make([]eventstore.Event, 1)
- events[0] = event
- for {
- select {
- case event := <-eventQueue:
- events = append(events, event)
- default:
- return events
- }
- }
-}
diff --git a/internal/eventstore/handler/handler_projection_test.go b/internal/eventstore/handler/handler_projection_test.go
deleted file mode 100644
index 3ee791a2d4..0000000000
--- a/internal/eventstore/handler/handler_projection_test.go
+++ /dev/null
@@ -1,1228 +0,0 @@
-package handler
-
-import (
- "context"
- "errors"
- "sync"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
-
- "github.com/zitadel/zitadel/internal/api/authz"
- "github.com/zitadel/zitadel/internal/api/call"
- "github.com/zitadel/zitadel/internal/api/service"
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
- es_repo_mock "github.com/zitadel/zitadel/internal/eventstore/repository/mock"
-)
-
-var (
- ErrQuery = errors.New("query err")
- ErrFilter = errors.New("filter err")
- ErrReduce = errors.New("reduce err")
- ErrLock = errors.New("lock failed")
- ErrUnlock = errors.New("unlock failed")
- ErrExec = errors.New("exec error")
- ErrBulk = errors.New("bulk err")
- ErrUpdate = errors.New("update err")
-)
-
-func TestProjectionHandler_Trigger(t *testing.T) {
- const pause = time.Millisecond
-
- startCtx := call.WithTimestamp(context.Background())
- start := call.FromContext(startCtx)
-
- h := &ProjectionHandler{
- Handler: Handler{
- Eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 1,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ),
- )),
- },
- ProjectionName: "test",
- reduce: testReduce(newTestStatement("testAgg", 1, 0)),
- update: testUpdate(t, 1, 0, nil),
- searchQuery: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 5, nil,
- ),
- }
-
- time.Sleep(pause)
- endCtx := h.Trigger(startCtx)
- // check if the new context has a call timestamp that's later than start+pause.
- assert.WithinRange(t, call.FromContext(endCtx), start.Add(pause), start.Add(pause+time.Second))
-}
-
-func TestProjectionHandler_TriggerErr(t *testing.T) {
- type fields struct {
- reduce Reduce
- update Update
- query SearchQuery
- eventstore func(t *testing.T) *eventstore.Eventstore
- }
- type args struct {
- ctx context.Context
- instances []string
- }
- type want struct {
- isErr func(err error) bool
- }
- tests := []struct {
- name string
- fields fields
- args args
- want want
- }{
- {
- "query error",
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return nil
- },
- query: testQuery(nil, 0, ErrQuery),
- },
- args{
- context.Background(),
- nil,
- },
- want{isErr: func(err error) bool {
- return errors.Is(err, ErrQuery)
- }},
- },
- {
- "no events",
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(
- eventstore.TestConfig(es_repo_mock.NewRepo(t).ExpectFilterEvents()),
- )
- },
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 5,
- nil),
- },
- args{
- context.Background(),
- nil,
- },
- want{
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- {
- "process error",
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 1,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ),
- ),
- )
- },
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 5,
- nil),
- reduce: testReduceErr(ErrReduce),
- },
- args{
- context.Background(),
- nil,
- },
- want{
- isErr: func(err error) bool {
- return errors.Is(err, ErrReduce)
- },
- },
- },
- {
- "process ok",
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 1,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ),
- ),
- )
- },
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 5,
- nil),
- reduce: testReduce(newTestStatement("testAgg", 1, 0)),
- update: testUpdate(t, 1, 0, nil),
- },
- args{
- context.Background(),
- nil,
- },
- want{
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- {
- "process limit exceeded ok",
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).
- ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 1,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ).ExpectFilterEvents(),
- ),
- )
- },
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 1,
- nil),
- reduce: testReduce(newTestStatement("testAgg", 1, 0)),
- update: testUpdate(t, 1, 0, nil),
- },
- args{
- context.Background(),
- nil,
- },
- want{
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &ProjectionHandler{
- Handler: Handler{
- Eventstore: tt.fields.eventstore(t),
- },
- ProjectionName: "test",
- reduce: tt.fields.reduce,
- update: tt.fields.update,
- searchQuery: tt.fields.query,
- }
-
- // context timestamp is checked in [TestProjectionHandler_Trigger]
- _, err := h.TriggerErr(tt.args.ctx, tt.args.instances...)
- if !tt.want.isErr(err) {
- t.Errorf("unexpected error %v", err)
- }
- })
- }
-}
-
-func TestProjectionHandler_Process(t *testing.T) {
- type fields struct {
- reduce Reduce
- update Update
- }
- type args struct {
- ctx context.Context
- events []eventstore.Event
- }
- type want struct {
- isErr func(err error) bool
- index int
- }
- tests := []struct {
- name string
- fields fields
- args args
- want want
- }{
- {
- name: "no events",
- fields: fields{},
- args: args{},
- want: want{
- isErr: func(err error) bool {
- return err == nil
- },
- index: 0,
- },
- },
- {
- name: "reduce fails",
- fields: fields{
- reduce: testReduceErr(ErrReduce),
- },
- args: args{
- events: []eventstore.Event{newTestEvent("id", "description", nil)},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, ErrReduce)
- },
- index: -1,
- },
- },
- {
- name: "stmt failed",
- fields: fields{
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 1, -1, ErrSomeStmtsFailed),
- },
- args: args{
- events: []eventstore.Event{newTestEvent("id", "description", nil)},
- },
- want: want{
- isErr: func(err error) bool {
- return errors.Is(err, ErrSomeStmtsFailed)
- },
- index: -1,
- },
- },
- {
- name: "stmt error",
- fields: fields{
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 1, -1, errors.New("some error")),
- },
- args: args{
- events: []eventstore.Event{newTestEvent("id", "description", nil)},
- },
- want: want{
- isErr: func(err error) bool {
- return err.Error() == "some error"
- },
- index: -1,
- },
- },
- {
- name: "stmt succeeded",
- fields: fields{
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 1, 0, nil),
- },
- args: args{
- events: []eventstore.Event{newTestEvent("id", "description", nil)},
- },
- want: want{
- isErr: func(err error) bool {
- return err == nil
- },
- index: 0,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := NewProjectionHandler(
- context.Background(),
- ProjectionHandlerConfig{
- HandlerConfig: HandlerConfig{
- Eventstore: nil,
- },
- ProjectionName: "test",
- RequeueEvery: -1,
- },
- tt.fields.reduce,
- tt.fields.update,
- nil,
- nil,
- nil,
- nil,
- false,
- )
-
- index, err := h.Process(tt.args.ctx, tt.args.events...)
- if !tt.want.isErr(err) {
- t.Errorf("unexpected error %v", err)
- }
- assert.Equal(t, tt.want.index, index)
- })
- }
-}
-
-func TestProjectionHandler_FetchEvents(t *testing.T) {
- type args struct {
- ctx context.Context
- instanceIDs []string
- }
- type want struct {
- limitExceeded bool
- isErr func(error) bool
- }
- type fields struct {
- eventstore *eventstore.Eventstore
- query SearchQuery
- }
- tests := []struct {
- name string
- args args
- fields fields
- want want
- }{
- {
- name: "query returns err",
- args: args{
- ctx: context.Background(),
- },
- fields: fields{
- query: testQuery(nil, 0, ErrQuery),
- },
- want: want{
- limitExceeded: false,
- isErr: func(err error) bool {
- return errors.Is(err, ErrQuery)
- },
- },
- },
- {
- name: "eventstore returns err",
- args: args{
- ctx: context.Background(),
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEventsError(ErrFilter),
- ),
- ),
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 5,
- nil,
- ),
- },
- want: want{
- limitExceeded: false,
- isErr: func(err error) bool {
- return errors.Is(err, ErrFilter)
- },
- },
- },
- {
- name: "no events found",
- args: args{
- ctx: context.Background(),
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(
- eventstore.TestConfig(es_repo_mock.NewRepo(t).ExpectFilterEvents()),
- ),
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 5,
- nil,
- ),
- },
- want: want{
- limitExceeded: false,
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- {
- name: "found events smaller than limit",
- args: args{
- ctx: context.Background(),
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 1,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- &repository.Event{
- ID: "id",
- Sequence: 2,
- PreviousAggregateSequence: 1,
- CreationDate: time.Now(),
- Type: "test.changed",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ),
- ),
- ),
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 5,
- nil,
- ),
- },
- want: want{
- limitExceeded: false,
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- {
- name: "found events exceeds limit",
- args: args{
- ctx: context.Background(),
- },
- fields: fields{
- eventstore: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- ID: "id",
- Sequence: 1,
- PreviousAggregateSequence: 0,
- CreationDate: time.Now(),
- Type: "test.added",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- &repository.Event{
- ID: "id",
- Sequence: 2,
- PreviousAggregateSequence: 1,
- CreationDate: time.Now(),
- Type: "test.changed",
- Version: "v1",
- AggregateID: "testid",
- AggregateType: "testAgg",
- },
- ),
- ),
- ),
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 2,
- nil,
- ),
- },
- want: want{
- limitExceeded: true,
- isErr: func(err error) bool {
- return err == nil
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &ProjectionHandler{
- Handler: Handler{
- Eventstore: tt.fields.eventstore,
- },
- searchQuery: tt.fields.query,
- }
- _, limitExceeded, err := h.FetchEvents(tt.args.ctx, tt.args.instanceIDs...)
- if !tt.want.isErr(err) {
- t.Errorf("ProjectionHandler.prepareBulkStmts() error = %v", err)
- return
- }
- if limitExceeded != tt.want.limitExceeded {
- t.Errorf("ProjectionHandler.prepareBulkStmts() = %v, want %v", limitExceeded, tt.want.limitExceeded)
- }
- })
- }
-}
-
-func TestProjection_subscribe(t *testing.T) {
- type args struct {
- ctx context.Context
- }
- type fields struct {
- reduce Reduce
- update Update
- events []eventstore.Event
- }
- tests := []struct {
- name string
- args args
- fields fields
- }{
- {
- "panic",
- args{
- ctx: context.Background(),
- },
- fields{
- reduce: nil,
- update: nil,
- events: []eventstore.Event{
- newTestEvent("id", "", nil),
- },
- },
- },
- {
- "error",
- args{
- ctx: context.Background(),
- },
- fields{
- reduce: testReduceErr(ErrReduce),
- update: nil,
- events: []eventstore.Event{
- newTestEvent("id", "", nil),
- },
- },
- },
- {
- "not all statement",
- args{
- ctx: context.Background(),
- },
- fields{
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 1, 0, ErrSomeStmtsFailed),
- events: []eventstore.Event{
- newTestEvent("id", "", nil),
- },
- },
- },
- {
- "single event ok",
- args{
- ctx: context.Background(),
- },
- fields{
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 1, 1, nil),
- events: []eventstore.Event{
- newTestEvent("id", "", nil),
- },
- },
- },
- {
- "multiple events ok",
- args{
- ctx: context.Background(),
- },
- fields{
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 2, 2, nil),
- events: []eventstore.Event{
- newTestEvent("id", "", nil),
- newTestEvent("id2", "", nil),
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &ProjectionHandler{
- Handler: Handler{
- EventQueue: make(chan eventstore.Event, 10),
- },
- reduce: tt.fields.reduce,
- update: tt.fields.update,
- }
- ctx, cancel := context.WithCancel(tt.args.ctx)
- go func() {
- //changed go h.subscribe(ctx) to this to be able to ignore logs easily
- t.Helper()
- h.subscribe(ctx)
- }()
- for _, event := range tt.fields.events {
- h.EventQueue <- event
- }
- time.Sleep(1 * time.Second)
- cancel()
- })
- }
-}
-
-func TestProjection_schedule(t *testing.T) {
-
- now := func() time.Time {
- return time.Date(2023, 1, 31, 12, 0, 0, 0, time.UTC)
- }
-
- type args struct {
- ctx context.Context
- }
- type fields struct {
- reduce Reduce
- update Update
- eventstore func(t *testing.T) *eventstore.Eventstore
- lock *lockMock
- unlock *unlockMock
- query SearchQuery
- handleActiveInstances time.Duration
- }
- type want struct {
- locksCount int
- lockCanceled bool
- unlockCount int
- }
- tests := []struct {
- name string
- args args
- fields fields
- want want
- }{
- {
- "panic",
- args{
- ctx: context.Background(),
- },
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return nil
- },
- },
- want{},
- },
- {
- "filter succeeded once error",
- args{
- ctx: context.Background(),
- },
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEventsError(ErrFilter),
- ),
- )
- },
- handleActiveInstances: 2 * time.Minute,
- },
- want{
- locksCount: 0,
- lockCanceled: false,
- unlockCount: 0,
- },
- },
- {
- "filter instance ids error",
- args{
- ctx: context.Background(),
- },
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- AggregateType: "system",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "",
- Type: "system.projections.scheduler.succeeded",
- }).
- ExpectInstanceIDsError(ErrFilter),
- ),
- )
- },
- handleActiveInstances: 2 * time.Minute,
- },
- want{
- locksCount: 0,
- lockCanceled: false,
- unlockCount: 0,
- },
- },
- {
- "lock error",
- args{
- ctx: context.Background(),
- },
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- AggregateType: "system",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "",
- Type: "system.projections.scheduler.succeeded",
- }).ExpectInstanceIDs(nil, "instanceID1"),
- ),
- )
- },
- lock: &lockMock{
- errWait: 100 * time.Millisecond,
- firstErr: ErrLock,
- canceled: make(chan bool, 1),
- },
- handleActiveInstances: 2 * time.Minute,
- },
- want{
- locksCount: 1,
- lockCanceled: true,
- unlockCount: 0,
- },
- },
- {
- "trigger error",
- args{
- ctx: context.Background(),
- },
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(
- &repository.Event{
- AggregateType: "system",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "",
- Type: "system.projections.scheduler.succeeded",
- }).ExpectInstanceIDs(nil, "instanceID1"),
- ),
- )
- },
- lock: &lockMock{
- canceled: make(chan bool, 1),
- firstErr: nil,
- errWait: 100 * time.Millisecond,
- },
- unlock: &unlockMock{},
- query: testQuery(nil, 0, ErrQuery),
- handleActiveInstances: 2 * time.Minute,
- },
- want{
- locksCount: 1,
- lockCanceled: true,
- unlockCount: 1,
- },
- },
- {
- "only active instances are handled",
- args{
- ctx: context.Background(),
- },
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).
- ExpectFilterEvents(&repository.Event{
- AggregateType: "system",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "",
- Type: "system.projections.scheduler.succeeded",
- }).
- ExpectInstanceIDs(
- []*repository.Filter{{
- Field: repository.FieldInstanceID,
- Operation: repository.OperationNotIn,
- Value: database.StringArray{""},
- }, {
- Field: repository.FieldCreationDate,
- Operation: repository.OperationGreater,
- Value: now().Add(-2 * time.Minute),
- }},
- "206626268110651755",
- ).
- ExpectFilterEvents(&repository.Event{
- AggregateType: "quota",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "206626268110651755",
- Type: "quota.notificationdue",
- }),
- ))
- },
- lock: &lockMock{
- canceled: make(chan bool, 1),
- firstErr: nil,
- errWait: 100 * time.Millisecond,
- },
- unlock: &unlockMock{},
- handleActiveInstances: 2 * time.Minute,
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 1, 1, nil),
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 2,
- nil,
- ),
- },
- want{
- locksCount: 1,
- lockCanceled: false,
- unlockCount: 1,
- },
- },
- {
- "all instances are handled",
- args{
- ctx: context.Background(),
- },
- fields{
- eventstore: func(t *testing.T) *eventstore.Eventstore {
- return eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).
- ExpectFilterEvents(&repository.Event{
- AggregateType: "system",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "",
- Type: "system.projections.scheduler.succeeded",
- }).
- ExpectInstanceIDs([]*repository.Filter{{
- Field: repository.FieldInstanceID,
- Operation: repository.OperationNotIn,
- Value: database.StringArray{""},
- }, {
- Field: repository.FieldCreationDate,
- Operation: repository.OperationGreater,
- Value: now().Add(-45 * time.Hour),
- }}, "206626268110651755").
- ExpectFilterEvents(&repository.Event{
- AggregateType: "quota",
- Sequence: 6,
- PreviousAggregateSequence: 5,
- InstanceID: "206626268110651755",
- Type: "quota.notificationdue",
- }),
- ))
- },
- lock: &lockMock{
- canceled: make(chan bool, 1),
- firstErr: nil,
- errWait: 100 * time.Millisecond,
- },
- unlock: &unlockMock{},
- handleActiveInstances: 45 * time.Hour,
- reduce: testReduce(newTestStatement("aggregate1", 1, 0)),
- update: testUpdate(t, 1, 1, nil),
- query: testQuery(
- eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes("test").
- Builder(),
- 2,
- nil,
- ),
- },
- want{
- locksCount: 1,
- lockCanceled: false,
- unlockCount: 1,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &ProjectionHandler{
- Handler: Handler{
- EventQueue: make(chan eventstore.Event, 10),
- Eventstore: tt.fields.eventstore(t),
- },
- reduce: tt.fields.reduce,
- update: tt.fields.update,
- searchQuery: tt.fields.query,
- lock: tt.fields.lock.lock(),
- unlock: tt.fields.unlock.unlock(),
- triggerProjection: time.NewTimer(0), // immediately run an iteration
- requeueAfter: time.Hour, // run only one iteration
- concurrentInstances: 1,
- handleActiveInstances: tt.fields.handleActiveInstances,
- retries: 0,
- nowFunc: now,
- }
- ctx, cancel := context.WithCancel(tt.args.ctx)
- go func() {
- //changed go h.schedule(ctx) to this to be able to ignore logs easily
- t.Helper()
- h.schedule(ctx)
- }()
-
- time.Sleep(time.Second)
- cancel()
- if tt.fields.lock != nil {
- tt.fields.lock.check(t, tt.want.locksCount, tt.want.lockCanceled)
- }
- if tt.fields.unlock != nil {
- tt.fields.unlock.check(t, tt.want.unlockCount)
- }
- })
- }
-}
-
-func Test_cancelOnErr(t *testing.T) {
- type args struct {
- ctx context.Context
- errs chan error
- err error
- }
- tests := []struct {
- name string
- args args
- cancelMocker *cancelMocker
- }{
- {
- name: "error occured",
- args: args{
- ctx: context.Background(),
- errs: make(chan error),
- err: ErrNoCondition,
- },
- cancelMocker: &cancelMocker{
- shouldBeCalled: true,
- wasCalled: make(chan bool, 1),
- },
- },
- {
- name: "ctx done",
- args: args{
- ctx: canceledCtx(),
- errs: make(chan error),
- },
- cancelMocker: &cancelMocker{
- shouldBeCalled: false,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- h := &ProjectionHandler{}
- go h.cancelOnErr(tt.args.ctx, tt.args.errs, tt.cancelMocker.mockCancel)
- if tt.args.err != nil {
- tt.args.errs <- tt.args.err
- }
- tt.cancelMocker.check(t)
- })
- }
-}
-
-func newTestStatement(aggType eventstore.AggregateType, seq, previousSeq uint64) *Statement {
- return &Statement{
- AggregateType: aggType,
- Sequence: seq,
- PreviousSequence: previousSeq,
- }
-}
-
-// testEvent implements the Event interface
-type testEvent struct {
- eventstore.BaseEvent
-
- description string
- data func() interface{}
-}
-
-func newTestEvent(id, description string, data func() interface{}) *testEvent {
- return &testEvent{
- description: description,
- data: data,
- BaseEvent: *eventstore.NewBaseEventForPush(
- service.WithService(authz.NewMockContext("instanceID", "resourceOwner", "editorUser"), "editorService"),
- eventstore.NewAggregate(authz.NewMockContext("zitadel", "caos", "adlerhurst"), id, "test.aggregate", "v1"),
- "test.event",
- ),
- }
-}
-
-func (e *testEvent) Data() interface{} {
- if e.data == nil {
- return nil
- }
- return e.data()
-}
-
-func (e *testEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return nil
-}
-
-func testUpdate(t *testing.T, expectedStmtCount, returnedIndex int, returnedErr error) Update {
- return func(ctx context.Context, stmts []*Statement, reduce Reduce) (int, error) {
- if expectedStmtCount != len(stmts) {
- t.Errorf("expected %d stmts got %d", expectedStmtCount, len(stmts))
- }
- return returnedIndex, returnedErr
- }
-}
-
-func testReduce(stmts *Statement) Reduce {
- return func(event eventstore.Event) (*Statement, error) {
- return stmts, nil
- }
-}
-
-func testReduceErr(err error) Reduce {
- return func(event eventstore.Event) (*Statement, error) {
- return nil, err
- }
-}
-
-func testQuery(query *eventstore.SearchQueryBuilder, limit uint64, err error) SearchQuery {
- return func(ctx context.Context, instanceIDs []string) (*eventstore.SearchQueryBuilder, uint64, error) {
- return query, limit, err
- }
-}
-
-type lockMock struct {
- callCount int
- canceled chan bool
- mu sync.Mutex
-
- firstErr error
- err error
- errWait time.Duration
-}
-
-func (m *lockMock) lock() Lock {
- return func(ctx context.Context, _ time.Duration, _ ...string) <-chan error {
- m.mu.Lock()
- defer m.mu.Unlock()
- m.callCount++
- errs := make(chan error)
- go func() {
- for i := 0; ; i++ {
- select {
- case <-ctx.Done():
- m.canceled <- true
- close(errs)
- return
- case <-time.After(m.errWait):
- err := m.err
- if i == 0 {
- err = m.firstErr
- }
- errs <- err
- }
- }
- }()
- return errs
- }
-}
-
-func (m *lockMock) check(t *testing.T, callCount int, shouldBeCanceled bool) {
- t.Helper()
- m.mu.Lock()
- defer m.mu.Unlock()
- if callCount != m.callCount {
- t.Errorf("wrong call count: expected %v got: %v", callCount, m.callCount)
- }
- if shouldBeCanceled {
- select {
- case <-m.canceled:
- case <-time.After(5 * time.Second):
- t.Error("lock should be canceled but wasn't")
- }
- }
-}
-
-type unlockMock struct {
- callCount int
- err error
- mu sync.Mutex
-}
-
-func (m *unlockMock) unlock() Unlock {
- return func(...string) error {
- m.mu.Lock()
- defer m.mu.Unlock()
- m.callCount++
- return m.err
- }
-}
-
-func (m *unlockMock) check(t *testing.T, callCount int) {
- t.Helper()
- m.mu.Lock()
- defer m.mu.Unlock()
- if callCount != m.callCount {
- t.Errorf("wrong call count: expected %v got: %v", callCount, m.callCount)
- }
-}
-
-func canceledCtx() context.Context {
- ctx, cancel := context.WithCancel(context.Background())
- cancel()
- return ctx
-}
-
-type cancelMocker struct {
- shouldBeCalled bool
- wasCalled chan bool
-}
-
-func (m *cancelMocker) mockCancel() {
- m.wasCalled <- true
-}
-
-func (m *cancelMocker) check(t *testing.T) {
- t.Helper()
- if m.shouldBeCalled {
- if wasCalled := <-m.wasCalled; !wasCalled {
- t.Errorf("cancel: should: %t got: %t", m.shouldBeCalled, wasCalled)
- }
- }
-}
diff --git a/internal/eventstore/handler/init.go b/internal/eventstore/handler/init.go
index 150196216c..0ae6d2261b 100644
--- a/internal/eventstore/handler/init.go
+++ b/internal/eventstore/handler/init.go
@@ -2,7 +2,7 @@ package handler
import "context"
-//Init initializes the projection with the given check
+// Init initializes the projection with the given check
type Init func(context.Context, *Check) error
type Check struct {
diff --git a/internal/eventstore/handler/reduce.go b/internal/eventstore/handler/reduce.go
deleted file mode 100644
index 329c59525a..0000000000
--- a/internal/eventstore/handler/reduce.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package handler
-
-import "github.com/zitadel/zitadel/internal/eventstore"
-
-//EventReducer represents the required data
-//to work with events
-type EventReducer struct {
- Event eventstore.EventType
- Reduce Reduce
-}
-
-//EventReducer represents the required data
-//to work with aggregates
-type AggregateReducer struct {
- Aggregate eventstore.AggregateType
- EventRedusers []EventReducer
-}
diff --git a/internal/eventstore/handler/statement.go b/internal/eventstore/handler/statement.go
index 1eecd78f23..fe7317d992 100644
--- a/internal/eventstore/handler/statement.go
+++ b/internal/eventstore/handler/statement.go
@@ -2,77 +2,8 @@ package handler
import (
"database/sql"
- "encoding/json"
- "errors"
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/eventstore"
)
-var (
- ErrNoProjection = errors.New("no projection")
- ErrNoValues = errors.New("no values")
- ErrNoCondition = errors.New("no condition")
- ErrSomeStmtsFailed = errors.New("some statements failed")
-)
-
-type Statements []Statement
-
-func (stmts Statements) Len() int { return len(stmts) }
-func (stmts Statements) Swap(i, j int) { stmts[i], stmts[j] = stmts[j], stmts[i] }
-func (stmts Statements) Less(i, j int) bool { return stmts[i].Sequence < stmts[j].Sequence }
-
-type Statement struct {
- AggregateType eventstore.AggregateType
- Sequence uint64
- PreviousSequence uint64
- InstanceID string
-
- Execute func(ex Executer, projectionName string) error
-}
-
-func (s *Statement) IsNoop() bool {
- return s.Execute == nil
-}
-
type Executer interface {
Exec(string, ...interface{}) (sql.Result, error)
}
-
-type Column struct {
- Name string
- Value interface{}
- ParameterOpt func(string) string
-}
-
-func NewCol(name string, value interface{}) Column {
- return Column{
- Name: name,
- Value: value,
- }
-}
-
-func NewJSONCol(name string, value interface{}) Column {
- marshalled, err := json.Marshal(value)
- if err != nil {
- logging.WithFields("column", name).WithError(err).Panic("unable to marshal column")
- }
-
- return NewCol(name, marshalled)
-}
-
-type Condition func(param string) (string, interface{})
-
-type NamespacedCondition func(namespace string) Condition
-
-func NewCond(name string, value interface{}) Condition {
- return func(param string) (string, interface{}) {
- return name + " = " + param, value
- }
-}
-
-func NewNamespacedCondition(name string, value interface{}) NamespacedCondition {
- return func(namespace string) Condition {
- return NewCond(namespace+"."+name, value)
- }
-}
diff --git a/internal/eventstore/handler/v2/event.go b/internal/eventstore/handler/v2/event.go
new file mode 100644
index 0000000000..f4b722504d
--- /dev/null
+++ b/internal/eventstore/handler/v2/event.go
@@ -0,0 +1,52 @@
+package handler
+
+import (
+ "context"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+const (
+ schedulerSucceeded = eventstore.EventType("system.projections.scheduler.succeeded")
+ aggregateType = eventstore.AggregateType("system")
+ aggregateID = "SYSTEM"
+)
+
+func (h *Handler) didProjectionInitialize(ctx context.Context) bool {
+ events, err := h.es.Filter(ctx, eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ InstanceID("").
+ AddQuery().
+ AggregateTypes(aggregateType).
+ AggregateIDs(aggregateID).
+ EventTypes(schedulerSucceeded).
+ EventData(map[string]interface{}{
+ "name": h.projection.Name(),
+ }).
+ Builder(),
+ )
+ return len(events) > 0 && err == nil
+}
+
+func (h *Handler) setSucceededOnce(ctx context.Context) error {
+ _, err := h.es.Push(ctx, &ProjectionSucceededEvent{
+ BaseEvent: *eventstore.NewBaseEventForPush(ctx,
+ eventstore.NewAggregate(ctx, aggregateID, aggregateType, "v1"),
+ schedulerSucceeded,
+ ),
+ Name: h.projection.Name(),
+ })
+ return err
+}
+
+type ProjectionSucceededEvent struct {
+ eventstore.BaseEvent `json:"-"`
+ Name string `json:"name"`
+}
+
+func (p *ProjectionSucceededEvent) Payload() interface{} {
+ return p
+}
+
+func (p *ProjectionSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return nil
+}
diff --git a/internal/eventstore/handler/v2/failed_event.go b/internal/eventstore/handler/v2/failed_event.go
new file mode 100644
index 0000000000..68771042e3
--- /dev/null
+++ b/internal/eventstore/handler/v2/failed_event.go
@@ -0,0 +1,95 @@
+package handler
+
+import (
+ "database/sql"
+ _ "embed"
+ "time"
+
+ "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+var (
+ //go:embed failed_event_set.sql
+ setFailedEventStmt string
+ //go:embed failed_event_get_count.sql
+ failureCountStmt string
+)
+
+type failure struct {
+ sequence uint64
+ instance string
+ aggregateID string
+ aggregateType eventstore.AggregateType
+ eventDate time.Time
+ err error
+}
+
+func failureFromEvent(event eventstore.Event, err error) *failure {
+ return &failure{
+ sequence: event.Sequence(),
+ instance: event.Aggregate().InstanceID,
+ aggregateID: event.Aggregate().ID,
+ aggregateType: event.Aggregate().Type,
+ eventDate: event.CreatedAt(),
+ err: err,
+ }
+}
+
+func failureFromStatement(statement *Statement, err error) *failure {
+ return &failure{
+ sequence: statement.Sequence,
+ instance: statement.InstanceID,
+ aggregateID: statement.AggregateID,
+ aggregateType: statement.AggregateType,
+ eventDate: statement.CreationDate,
+ err: err,
+ }
+}
+
+func (h *Handler) handleFailedStmt(tx *sql.Tx, currentState *state, f *failure) (shouldContinue bool) {
+ failureCount, err := h.failureCount(tx, f)
+ if err != nil {
+ h.logFailure(f).WithError(err).Warn("unable to get failure count")
+ return false
+ }
+ failureCount += 1
+ err = h.setFailureCount(tx, failureCount, f)
+ h.logFailure(f).OnError(err).Warn("unable to update failure count")
+
+ return failureCount >= h.maxFailureCount
+}
+
+func (h *Handler) failureCount(tx *sql.Tx, f *failure) (count uint8, err error) {
+ row := tx.QueryRow(failureCountStmt,
+ h.projection.Name(),
+ f.instance,
+ f.aggregateType,
+ f.aggregateID,
+ f.sequence,
+ )
+ if err = row.Err(); err != nil {
+ return 0, errors.ThrowInternal(err, "CRDB-Unnex", "unable to update failure count")
+ }
+ if err = row.Scan(&count); err != nil {
+ return 0, errors.ThrowInternal(err, "CRDB-RwSMV", "unable to scan count")
+ }
+ return count, nil
+}
+
+func (h *Handler) setFailureCount(tx *sql.Tx, count uint8, f *failure) error {
+ _, err := tx.Exec(setFailedEventStmt,
+ h.projection.Name(),
+ f.instance,
+ f.aggregateType,
+ f.aggregateID,
+ f.eventDate,
+ f.sequence,
+ count,
+ f.err.Error(),
+ )
+ if err != nil {
+ return errors.ThrowInternal(err, "CRDB-4Ht4x", "set failure count failed")
+ }
+ return nil
+}
diff --git a/internal/eventstore/handler/v2/failed_event_get_count.sql b/internal/eventstore/handler/v2/failed_event_get_count.sql
new file mode 100644
index 0000000000..18ad7c5505
--- /dev/null
+++ b/internal/eventstore/handler/v2/failed_event_get_count.sql
@@ -0,0 +1,12 @@
+WITH failures AS (
+ SELECT
+ failure_count
+ FROM
+ projections.failed_events2
+ WHERE
+ projection_name = $1
+ AND instance_id = $2
+ AND aggregate_type = $3
+ AND aggregate_id = $4
+ AND failed_sequence = $5
+) SELECT COALESCE((SELECT failure_count FROM failures), 0) AS failure_count
\ No newline at end of file
diff --git a/internal/eventstore/handler/v2/failed_event_set.sql b/internal/eventstore/handler/v2/failed_event_set.sql
new file mode 100644
index 0000000000..b4954299f3
--- /dev/null
+++ b/internal/eventstore/handler/v2/failed_event_set.sql
@@ -0,0 +1,31 @@
+INSERT INTO projections.failed_events2 (
+ projection_name
+ , instance_id
+ , aggregate_type
+ , aggregate_id
+ , event_creation_date
+ , failed_sequence
+ , failure_count
+ , error
+ , last_failed
+) VALUES (
+ $1
+ , $2
+ , $3
+ , $4
+ , $5
+ , $6
+ , $7
+ , $8
+ , now()
+) ON CONFLICT (
+ projection_name
+ , aggregate_type
+ , aggregate_id
+ , failed_sequence
+ , instance_id
+) DO UPDATE SET
+ failure_count = EXCLUDED.failure_count
+ , error = EXCLUDED.error
+ , last_failed = EXCLUDED.last_failed
+;
\ No newline at end of file
diff --git a/internal/eventstore/handler/v2/handler.go b/internal/eventstore/handler/v2/handler.go
new file mode 100644
index 0000000000..0903dcca7b
--- /dev/null
+++ b/internal/eventstore/handler/v2/handler.go
@@ -0,0 +1,465 @@
+package handler
+
+import (
+ "context"
+ "database/sql"
+ "errors"
+ "math"
+ "sync"
+ "time"
+
+ "github.com/jackc/pgconn"
+
+ "github.com/zitadel/zitadel/internal/api/authz"
+ "github.com/zitadel/zitadel/internal/api/call"
+ "github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/repository/pseudo"
+ "github.com/zitadel/zitadel/internal/telemetry/tracing"
+)
+
+type EventStore interface {
+ InstanceIDs(ctx context.Context, maxAge time.Duration, forceLoad bool, query *eventstore.SearchQueryBuilder) ([]string, error)
+ Filter(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error)
+ Push(ctx context.Context, cmds ...eventstore.Command) ([]eventstore.Event, error)
+}
+
+type Config struct {
+ Client *database.DB
+ Eventstore EventStore
+
+ BulkLimit uint16
+ RequeueEvery time.Duration
+ RetryFailedAfter time.Duration
+ HandleActiveInstances time.Duration
+ TransactionDuration time.Duration
+ MaxFailureCount uint8
+
+ TriggerWithoutEvents Reduce
+}
+
+type Handler struct {
+ client *database.DB
+ projection Projection
+
+ es EventStore
+ bulkLimit uint16
+ eventTypes map[eventstore.AggregateType][]eventstore.EventType
+
+ maxFailureCount uint8
+ retryFailedAfter time.Duration
+ requeueEvery time.Duration
+ handleActiveInstances time.Duration
+ txDuration time.Duration
+ now nowFunc
+
+ triggeredInstancesSync sync.Map
+
+ triggerWithoutEvents Reduce
+}
+
+// nowFunc makes [time.Now] mockable
+type nowFunc func() time.Time
+
+type Projection interface {
+ Name() string
+ Reducers() []AggregateReducer
+}
+
+func NewHandler(
+ ctx context.Context,
+ config *Config,
+ projection Projection,
+) *Handler {
+ aggregates := make(map[eventstore.AggregateType][]eventstore.EventType, len(projection.Reducers()))
+ for _, reducer := range projection.Reducers() {
+ eventTypes := make([]eventstore.EventType, len(reducer.EventReducers))
+ for i, eventReducer := range reducer.EventReducers {
+ eventTypes[i] = eventReducer.Event
+ }
+ if _, ok := aggregates[reducer.Aggregate]; ok {
+ aggregates[reducer.Aggregate] = append(aggregates[reducer.Aggregate], eventTypes...)
+ continue
+ }
+ aggregates[reducer.Aggregate] = eventTypes
+ }
+
+ handler := &Handler{
+ projection: projection,
+ client: config.Client,
+ es: config.Eventstore,
+ bulkLimit: config.BulkLimit,
+ eventTypes: aggregates,
+ requeueEvery: config.RequeueEvery,
+ handleActiveInstances: config.HandleActiveInstances,
+ now: time.Now,
+ maxFailureCount: config.MaxFailureCount,
+ retryFailedAfter: config.RetryFailedAfter,
+ triggeredInstancesSync: sync.Map{},
+ triggerWithoutEvents: config.TriggerWithoutEvents,
+ txDuration: config.TransactionDuration,
+ }
+
+ return handler
+}
+
+func (h *Handler) Start(ctx context.Context) {
+ go h.schedule(ctx)
+ if h.triggerWithoutEvents != nil {
+ return
+ }
+ go h.subscribe(ctx)
+}
+
+func (h *Handler) schedule(ctx context.Context) {
+ // if there was no run before trigger instantly
+ t := time.NewTimer(0)
+ didInitialize := h.didProjectionInitialize(ctx)
+ if didInitialize {
+ t.Reset(h.requeueEvery)
+ }
+
+ for {
+ select {
+ case <-ctx.Done():
+ t.Stop()
+ return
+ case <-t.C:
+ instances, err := h.queryInstances(ctx, didInitialize)
+ h.log().OnError(err).Debug("unable to query instances")
+
+ var instanceFailed bool
+ scheduledCtx := call.WithTimestamp(ctx)
+ for _, instance := range instances {
+ instanceCtx := authz.WithInstanceID(scheduledCtx, instance)
+
+ // simple implementation of do while
+ _, err = h.Trigger(instanceCtx)
+ instanceFailed = instanceFailed || err != nil
+ h.log().WithField("instance", instance).OnError(err).Info("scheduled trigger failed")
+ // retry if trigger failed
+ for ; err != nil; _, err = h.Trigger(instanceCtx) {
+ time.Sleep(h.retryFailedAfter)
+ instanceFailed = instanceFailed || err != nil
+ h.log().WithField("instance", instance).OnError(err).Info("scheduled trigger failed")
+ if err == nil {
+ break
+ }
+ }
+ }
+
+ if !didInitialize && !instanceFailed {
+ err = h.setSucceededOnce(ctx)
+ h.log().OnError(err).Debug("unable to set succeeded once")
+ didInitialize = err == nil
+ }
+ t.Reset(h.requeueEvery)
+ }
+ }
+}
+
+func (h *Handler) subscribe(ctx context.Context) {
+ queue := make(chan eventstore.Event, 100)
+ subscription := eventstore.SubscribeEventTypes(queue, h.eventTypes)
+ for {
+ select {
+ case <-ctx.Done():
+ subscription.Unsubscribe()
+ h.log().Debug("shutdown")
+ return
+ case event := <-queue:
+ events := checkAdditionalEvents(queue, event)
+ solvedInstances := make([]string, 0, len(events))
+ queueCtx := call.WithTimestamp(ctx)
+ for _, e := range events {
+ if instanceSolved(solvedInstances, e.Aggregate().InstanceID) {
+ continue
+ }
+ queueCtx = authz.WithInstanceID(queueCtx, e.Aggregate().InstanceID)
+ _, err := h.Trigger(queueCtx)
+ h.log().OnError(err).Debug("trigger of queued event failed")
+ if err == nil {
+ solvedInstances = append(solvedInstances, e.Aggregate().InstanceID)
+ }
+ }
+ }
+ }
+}
+
+func instanceSolved(solvedInstances []string, instanceID string) bool {
+ for _, solvedInstance := range solvedInstances {
+ if solvedInstance == instanceID {
+ return true
+ }
+ }
+ return false
+}
+
+func checkAdditionalEvents(eventQueue chan eventstore.Event, event eventstore.Event) []eventstore.Event {
+ events := make([]eventstore.Event, 1)
+ events[0] = event
+ for {
+ wait := time.NewTimer(1 * time.Millisecond)
+ select {
+ case event := <-eventQueue:
+ events = append(events, event)
+ case <-wait.C:
+ return events
+ }
+ }
+}
+
+func (h *Handler) queryInstances(ctx context.Context, didInitialize bool) ([]string, error) {
+ query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsInstanceIDs).
+ AwaitOpenTransactions().
+ AllowTimeTravel().
+ ExcludedInstanceID("")
+ if didInitialize {
+ query = query.
+ CreationDateAfter(h.now().Add(-1 * h.handleActiveInstances))
+ }
+ return h.es.InstanceIDs(ctx, h.requeueEvery, !didInitialize, query)
+}
+
+type triggerConfig struct {
+ awaitRunning bool
+}
+
+type triggerOpt func(conf *triggerConfig)
+
+func WithAwaitRunning() triggerOpt {
+ return func(conf *triggerConfig) {
+ conf.awaitRunning = true
+ }
+}
+
+func (h *Handler) Trigger(ctx context.Context, opts ...triggerOpt) (_ context.Context, err error) {
+ if authz.GetInstance(ctx).InstanceID() != "" {
+ var span *tracing.Span
+ ctx, span = tracing.NewSpan(ctx)
+ defer func() { span.EndWithError(err) }()
+ }
+
+ config := new(triggerConfig)
+ for _, opt := range opts {
+ opt(config)
+ }
+
+ cancel := h.lockInstance(ctx, config)
+ if cancel == nil {
+ return call.ResetTimestamp(ctx), nil
+ }
+ defer cancel()
+
+ for i := 0; ; i++ {
+ additionalIteration, err := h.processEvents(ctx, config)
+ h.log().OnError(err).Warn("process events failed")
+ h.log().WithField("iteration", i).Debug("trigger iteration")
+ if !additionalIteration || err != nil {
+ return call.ResetTimestamp(ctx), err
+ }
+ }
+}
+
+// lockInstances tries to lock the instance.
+// If the instance is already locked from another process no cancel function is returned
+// the instance can be skipped then
+// If the instance is locked, an unlock deferable function is returned
+func (h *Handler) lockInstance(ctx context.Context, config *triggerConfig) func() {
+ instanceID := authz.GetInstance(ctx).InstanceID()
+
+ // Check that the instance has a mutex to lock
+ instanceMu, _ := h.triggeredInstancesSync.LoadOrStore(instanceID, new(sync.Mutex))
+ unlock := func() {
+ instanceMu.(*sync.Mutex).Unlock()
+ }
+ if !instanceMu.(*sync.Mutex).TryLock() {
+ instanceMu.(*sync.Mutex).Lock()
+ if config.awaitRunning {
+ return unlock
+ }
+ defer unlock()
+ return nil
+ }
+ return unlock
+}
+
+func (h *Handler) processEvents(ctx context.Context, config *triggerConfig) (additionalIteration bool, err error) {
+ defer func() {
+ pgErr := new(pgconn.PgError)
+ if errors.As(err, &pgErr) {
+ // error returned if the row is currently locked by another connection
+ if pgErr.Code == "55P03" {
+ h.log().Debug("state already locked")
+ err = nil
+ additionalIteration = false
+ }
+ }
+ }()
+
+ if h.txDuration > 0 {
+ var cancel func()
+ ctx, cancel = context.WithTimeout(ctx, h.txDuration)
+ defer cancel()
+ }
+
+ tx, err := h.client.Begin()
+ if err != nil {
+ return false, err
+ }
+ defer func() {
+ if err != nil {
+ rollbackErr := tx.Rollback()
+ h.log().OnError(rollbackErr).Debug("unable to rollback tx")
+ return
+ }
+ err = tx.Commit()
+ }()
+
+ currentState, err := h.currentState(ctx, tx, config)
+ if err != nil {
+ if errors.Is(err, errJustUpdated) {
+ return false, nil
+ }
+ return additionalIteration, err
+ }
+
+ var statements []*Statement
+ statements, additionalIteration, err = h.generateStatements(ctx, tx, currentState)
+ if err != nil || len(statements) == 0 {
+ return additionalIteration, err
+ }
+
+ lastProcessedIndex, err := h.executeStatements(ctx, tx, currentState, statements)
+ if lastProcessedIndex < 0 {
+ return false, err
+ }
+
+ currentState.position = statements[lastProcessedIndex].Position
+ currentState.aggregateID = statements[lastProcessedIndex].AggregateID
+ currentState.aggregateType = statements[lastProcessedIndex].AggregateType
+ currentState.sequence = statements[lastProcessedIndex].Sequence
+ currentState.eventTimestamp = statements[lastProcessedIndex].CreationDate
+ err = h.setState(tx, currentState)
+
+ return additionalIteration, err
+}
+
+func (h *Handler) generateStatements(ctx context.Context, tx *sql.Tx, currentState *state) (_ []*Statement, additionalIteration bool, err error) {
+ if h.triggerWithoutEvents != nil {
+ stmt, err := h.triggerWithoutEvents(pseudo.NewScheduledEvent(ctx, time.Now(), currentState.instanceID))
+ if err != nil {
+ return nil, false, err
+ }
+ return []*Statement{stmt}, false, nil
+ }
+
+ events, err := h.es.Filter(ctx, h.eventQuery(currentState))
+ if err != nil {
+ h.log().WithError(err).Debug("filter eventstore failed")
+ return nil, false, err
+ }
+ eventAmount := len(events)
+ events = skipPreviouslyReduced(events, currentState)
+
+ if len(events) == 0 {
+ h.updateLastUpdated(ctx, tx, currentState)
+ return nil, false, nil
+ }
+
+ statements, err := h.eventsToStatements(tx, events, currentState)
+ if len(statements) == 0 {
+ return nil, false, err
+ }
+
+ additionalIteration = eventAmount == int(h.bulkLimit)
+ if len(statements) < len(events) {
+ // retry imediatly if statements failed
+ additionalIteration = true
+ }
+
+ return statements, additionalIteration, nil
+}
+
+func skipPreviouslyReduced(events []eventstore.Event, currentState *state) []eventstore.Event {
+ for i, event := range events {
+ if event.Position() == currentState.position &&
+ event.Aggregate().ID == currentState.aggregateID &&
+ event.Aggregate().Type == currentState.aggregateType &&
+ event.Sequence() == currentState.sequence {
+ return events[i+1:]
+ }
+ }
+ return events
+}
+
+func (h *Handler) executeStatements(ctx context.Context, tx *sql.Tx, currentState *state, statements []*Statement) (lastProcessedIndex int, err error) {
+ lastProcessedIndex = -1
+
+ for i, statement := range statements {
+ select {
+ case <-ctx.Done():
+ break
+ default:
+ err := h.executeStatement(ctx, tx, currentState, statement)
+ if err != nil {
+ return lastProcessedIndex, err
+ }
+ lastProcessedIndex = i
+ }
+ }
+ return lastProcessedIndex, nil
+}
+
+func (h *Handler) executeStatement(ctx context.Context, tx *sql.Tx, currentState *state, statement *Statement) (err error) {
+ if statement.Execute == nil {
+ return nil
+ }
+
+ _, err = tx.Exec("SAVEPOINT exec")
+ if err != nil {
+ h.log().WithError(err).Debug("create savepoint failed")
+ return err
+ }
+ var shouldContinue bool
+ defer func() {
+ _, err = tx.Exec("RELEASE SAVEPOINT exec")
+ }()
+
+ if err = statement.Execute(tx, h.projection.Name()); err != nil {
+ h.log().WithError(err).Error("statement execution failed")
+
+ shouldContinue = h.handleFailedStmt(tx, currentState, failureFromStatement(statement, err))
+ if shouldContinue {
+ return nil
+ }
+
+ return err
+ }
+
+ return nil
+}
+
+func (h *Handler) eventQuery(currentState *state) *eventstore.SearchQueryBuilder {
+ builder := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
+ Limit(uint64(h.bulkLimit)).
+ AllowTimeTravel().
+ OrderAsc().
+ InstanceID(currentState.instanceID)
+
+ if currentState.position > 0 {
+ builder = builder.PositionAfter(math.Float64frombits(math.Float64bits(currentState.position) - 10))
+ }
+
+ for aggregateType, eventTypes := range h.eventTypes {
+ query := builder.
+ AddQuery().
+ AggregateTypes(aggregateType).
+ EventTypes(eventTypes...)
+
+ builder = query.Builder()
+ }
+
+ return builder
+}
diff --git a/internal/eventstore/handler/crdb/init.go b/internal/eventstore/handler/v2/init.go
similarity index 83%
rename from internal/eventstore/handler/crdb/init.go
rename to internal/eventstore/handler/v2/init.go
index 420b11731a..cca5cb995b 100644
--- a/internal/eventstore/handler/crdb/init.go
+++ b/internal/eventstore/handler/v2/init.go
@@ -1,4 +1,4 @@
-package crdb
+package handler
import (
"context"
@@ -9,19 +9,19 @@ import (
"github.com/jackc/pgconn"
"github.com/zitadel/logging"
- caos_errs "github.com/zitadel/zitadel/internal/errors"
+ errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore/handler"
)
type Table struct {
- columns []*Column
+ columns []*InitColumn
primaryKey PrimaryKey
indices []*Index
constraints []*Constraint
foreignKeys []*ForeignKey
}
-func NewTable(columns []*Column, key PrimaryKey, opts ...TableOption) *Table {
+func NewTable(columns []*InitColumn, key PrimaryKey, opts ...TableOption) *Table {
t := &Table{
columns: columns,
primaryKey: key,
@@ -37,7 +37,7 @@ type SuffixedTable struct {
suffix string
}
-func NewSuffixedTable(columns []*Column, key PrimaryKey, suffix string, opts ...TableOption) *SuffixedTable {
+func NewSuffixedTable(columns []*InitColumn, key PrimaryKey, suffix string, opts ...TableOption) *SuffixedTable {
return &SuffixedTable{
Table: *NewTable(columns, key, opts...),
suffix: suffix,
@@ -64,7 +64,7 @@ func WithForeignKey(key *ForeignKey) TableOption {
}
}
-type Column struct {
+type InitColumn struct {
Name string
Type ColumnType
nullable bool
@@ -72,10 +72,10 @@ type Column struct {
deleteCascade string
}
-type ColumnOption func(*Column)
+type ColumnOption func(*InitColumn)
-func NewColumn(name string, columnType ColumnType, opts ...ColumnOption) *Column {
- column := &Column{
+func NewColumn(name string, columnType ColumnType, opts ...ColumnOption) *InitColumn {
+ column := &InitColumn{
Name: name,
Type: columnType,
nullable: false,
@@ -88,19 +88,19 @@ func NewColumn(name string, columnType ColumnType, opts ...ColumnOption) *Column
}
func Nullable() ColumnOption {
- return func(c *Column) {
+ return func(c *InitColumn) {
c.nullable = true
}
}
func Default(value interface{}) ColumnOption {
- return func(c *Column) {
+ return func(c *InitColumn) {
c.defaultValue = value
}
}
func DeleteCascade(column string) ColumnOption {
- return func(c *Column) {
+ return func(c *InitColumn) {
c.deleteCascade = column
}
}
@@ -128,9 +128,8 @@ const (
func NewIndex(name string, columns []string, opts ...indexOpts) *Index {
i := &Index{
- Name: name,
- Columns: columns,
- bucketCount: 0,
+ Name: name,
+ Columns: columns,
}
for _, opt := range opts {
opt(i)
@@ -139,16 +138,16 @@ func NewIndex(name string, columns []string, opts ...indexOpts) *Index {
}
type Index struct {
- Name string
- Columns []string
- bucketCount uint16
+ Name string
+ Columns []string
+ includes []string
}
type indexOpts func(*Index)
-func Hash(bucketsCount uint16) indexOpts {
+func WithInclude(columns ...string) indexOpts {
return func(i *Index) {
- i.bucketCount = bucketsCount
+ i.includes = columns
}
}
@@ -186,25 +185,28 @@ type ForeignKey struct {
RefColumns []string
}
-// Init implements handler.Init
-func (h *StatementHandler) Init(ctx context.Context) error {
- check := h.initCheck
- if check == nil || check.IsNoop() {
+type initializer interface {
+ Init() *handler.Check
+}
+
+func (h *Handler) Init(ctx context.Context) error {
+ check, ok := h.projection.(initializer)
+ if !ok || check.Init().IsNoop() {
return nil
}
tx, err := h.client.BeginTx(ctx, nil)
if err != nil {
- return caos_errs.ThrowInternal(err, "CRDB-SAdf2", "begin failed")
+ return errs.ThrowInternal(err, "CRDB-SAdf2", "begin failed")
}
- for i, execute := range check.Executes {
- logging.WithFields("projection", h.ProjectionName, "execute", i).Debug("executing check")
- next, err := execute(h.client, h.ProjectionName)
+ for i, execute := range check.Init().Executes {
+ logging.WithFields("projection", h.projection.Name(), "execute", i).Debug("executing check")
+ next, err := execute(tx, h.projection.Name())
if err != nil {
- tx.Rollback()
+ logging.OnError(tx.Rollback()).Debug("unable to rollback")
return err
}
if !next {
- logging.WithFields("projection", h.ProjectionName, "execute", i).Debug("projection set up")
+ logging.WithFields("projection", h.projection.Name(), "execute", i).Debug("projection set up")
break
}
}
@@ -272,15 +274,15 @@ func execNextIfExists(config execConfig, q query, opts []execOption, executeNext
}
func isErrAlreadyExists(err error) bool {
- caosErr := &caos_errs.CaosError{}
+ caosErr := &errs.CaosError{}
if !errors.As(err, &caosErr) {
return false
}
- sqlErr, ok := caosErr.GetParent().(*pgconn.PgError)
- if !ok {
- return false
+ pgErr := new(pgconn.PgError)
+ if errors.As(caosErr.Parent, &pgErr) {
+ return pgErr.Code == "42P07"
}
- return sqlErr.Code == "42P07"
+ return false
}
func createTableStatement(table *Table, tableName string, suffix string) string {
@@ -330,11 +332,10 @@ func createIndexStatement(index *Index, tableName string) string {
tableName,
strings.Join(index.Columns, ","),
)
- if index.bucketCount == 0 {
- return stmt + ";"
+ if len(index.includes) > 0 {
+ stmt += " INCLUDE (" + strings.Join(index.includes, ", ") + ")"
}
- return fmt.Sprintf("SET experimental_enable_hash_sharded_indexes=on; %s USING HASH WITH BUCKET_COUNT = %d;",
- stmt, index.bucketCount)
+ return stmt + ";"
}
func foreignKeyName(name, tableName, suffix string) string {
@@ -355,7 +356,7 @@ func tableNameWithoutSchema(name string) string {
return name[strings.LastIndex(name, ".")+1:]
}
-func createColumnsStatement(cols []*Column, tableName string) string {
+func createColumnsStatement(cols []*InitColumn, tableName string) string {
columns := make([]string, len(cols))
for i, col := range cols {
column := col.Name + " " + columnType(col.Type)
diff --git a/internal/eventstore/handler/v2/log.go b/internal/eventstore/handler/v2/log.go
new file mode 100644
index 0000000000..e9145dfb43
--- /dev/null
+++ b/internal/eventstore/handler/v2/log.go
@@ -0,0 +1,23 @@
+package handler
+
+import (
+ "github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+func (h *Handler) log() *logging.Entry {
+ return logging.WithFields("projection", h.projection.Name())
+}
+
+func (h *Handler) logFailure(fail *failure) *logging.Entry {
+ return h.log().WithField("sequence", fail.sequence).
+ WithField("instance", fail.instance).
+ WithField("aggregate", fail.aggregateID)
+}
+
+func (h *Handler) logEvent(event eventstore.Event) *logging.Entry {
+ return h.log().WithField("sequence", event.Sequence()).
+ WithField("instance", event.Aggregate().InstanceID).
+ WithField("aggregate", event.Aggregate().Type)
+}
diff --git a/internal/eventstore/handler/v2/mock_test.go b/internal/eventstore/handler/v2/mock_test.go
new file mode 100644
index 0000000000..ebd49659f1
--- /dev/null
+++ b/internal/eventstore/handler/v2/mock_test.go
@@ -0,0 +1,18 @@
+package handler
+
+var _ Projection = (*projection)(nil)
+
+type projection struct {
+ name string
+ reducers []AggregateReducer
+}
+
+// Name implements Projection
+func (p *projection) Name() string {
+ return p.name
+}
+
+// Reducers implements Projection
+func (p *projection) Reducers() []AggregateReducer {
+ return p.reducers
+}
diff --git a/internal/eventstore/handler/v2/reduce.go b/internal/eventstore/handler/v2/reduce.go
new file mode 100644
index 0000000000..467b12cba0
--- /dev/null
+++ b/internal/eventstore/handler/v2/reduce.go
@@ -0,0 +1,21 @@
+package handler
+
+import "github.com/zitadel/zitadel/internal/eventstore"
+
+// EventReducer represents the required data
+// to work with events
+type EventReducer struct {
+ Event eventstore.EventType
+ Reduce Reduce
+}
+
+// Reduce reduces the given event to a statement
+// which is used to update the projection
+type Reduce func(eventstore.Event) (*Statement, error)
+
+// EventReducer represents the required data
+// to work with aggregates
+type AggregateReducer struct {
+ Aggregate eventstore.AggregateType
+ EventReducers []EventReducer
+}
diff --git a/internal/eventstore/handler/v2/state.go b/internal/eventstore/handler/v2/state.go
new file mode 100644
index 0000000000..a5171be8fd
--- /dev/null
+++ b/internal/eventstore/handler/v2/state.go
@@ -0,0 +1,119 @@
+package handler
+
+import (
+ "context"
+ "database/sql"
+ _ "embed"
+ "errors"
+ "time"
+
+ "github.com/zitadel/zitadel/internal/api/authz"
+ errs "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+type state struct {
+ instanceID string
+ position float64
+ eventTimestamp time.Time
+ aggregateType eventstore.AggregateType
+ aggregateID string
+ sequence uint64
+}
+
+var (
+ //go:embed state_get.sql
+ currentStateStmt string
+ //go:embed state_get_await.sql
+ currentStateAwaitStmt string
+ //go:embed state_set.sql
+ updateStateStmt string
+ //go:embed state_lock.sql
+ lockStateStmt string
+ //go:embed state_set_last_run.sql
+ updateStateLastRunStmt string
+
+ errJustUpdated = errors.New("projection was just updated")
+)
+
+func (h *Handler) currentState(ctx context.Context, tx *sql.Tx, config *triggerConfig) (currentState *state, err error) {
+ currentState = &state{
+ instanceID: authz.GetInstance(ctx).InstanceID(),
+ }
+
+ var (
+ aggregateID = new(sql.NullString)
+ aggregateType = new(sql.NullString)
+ sequence = new(sql.NullInt64)
+ timestamp = new(sql.NullTime)
+ position = new(sql.NullFloat64)
+ )
+
+ stateQuery := currentStateStmt
+ if config.awaitRunning {
+ stateQuery = currentStateAwaitStmt
+ }
+
+ row := tx.QueryRow(stateQuery, currentState.instanceID, h.projection.Name())
+ err = row.Scan(
+ aggregateID,
+ aggregateType,
+ sequence,
+ timestamp,
+ position,
+ )
+ if errors.Is(err, sql.ErrNoRows) {
+ err = h.lockState(tx, currentState.instanceID)
+ }
+ if err != nil {
+ h.log().WithError(err).Debug("unable to query current state")
+ return nil, err
+ }
+
+ currentState.aggregateID = aggregateID.String
+ currentState.aggregateType = eventstore.AggregateType(aggregateType.String)
+ currentState.sequence = uint64(sequence.Int64)
+ currentState.eventTimestamp = timestamp.Time
+ currentState.position = position.Float64
+ return currentState, nil
+}
+
+func (h *Handler) setState(tx *sql.Tx, updatedState *state) error {
+ res, err := tx.Exec(updateStateStmt,
+ h.projection.Name(),
+ updatedState.instanceID,
+ updatedState.aggregateID,
+ updatedState.aggregateType,
+ updatedState.sequence,
+ updatedState.eventTimestamp,
+ updatedState.position,
+ )
+ if err != nil {
+ h.log().WithError(err).Debug("unable to update state")
+ return err
+ }
+ if affected, err := res.RowsAffected(); affected == 0 {
+ h.log().OnError(err).Error("unable to check if states are updated")
+ return errs.ThrowInternal(err, "V2-FGEKi", "unable to update state")
+ }
+ return nil
+}
+
+func (h *Handler) updateLastUpdated(ctx context.Context, tx *sql.Tx, updatedState *state) {
+ _, err := tx.ExecContext(ctx, updateStateLastRunStmt, h.projection.Name(), updatedState.instanceID)
+ h.log().OnError(err).Debug("unable to update last updated")
+}
+
+func (h *Handler) lockState(tx *sql.Tx, instanceID string) error {
+ res, err := tx.Exec(lockStateStmt,
+ h.projection.Name(),
+ instanceID,
+ )
+ if err != nil {
+ return err
+ }
+ if affected, err := res.RowsAffected(); affected == 0 || err != nil {
+ return errs.ThrowInternal(err, "V2-lpiK0", "projection already locked")
+ }
+ return nil
+}
diff --git a/internal/eventstore/handler/v2/state_get.sql b/internal/eventstore/handler/v2/state_get.sql
new file mode 100644
index 0000000000..37e0c8784b
--- /dev/null
+++ b/internal/eventstore/handler/v2/state_get.sql
@@ -0,0 +1,12 @@
+SELECT
+ aggregate_id
+ , aggregate_type
+ , "sequence"
+ , event_date
+ , "position"
+FROM
+ projections.current_states
+WHERE
+ instance_id = $1
+ AND projection_name = $2
+FOR UPDATE NOWAIT;
\ No newline at end of file
diff --git a/internal/eventstore/handler/v2/state_get_await.sql b/internal/eventstore/handler/v2/state_get_await.sql
new file mode 100644
index 0000000000..0ab4bc06c9
--- /dev/null
+++ b/internal/eventstore/handler/v2/state_get_await.sql
@@ -0,0 +1,12 @@
+SELECT
+ aggregate_id
+ , aggregate_type
+ , "sequence"
+ , event_date
+ , "position"
+FROM
+ projections.current_states
+WHERE
+ instance_id = $1
+ AND projection_name = $2
+FOR UPDATE;
\ No newline at end of file
diff --git a/internal/eventstore/handler/v2/state_lock.sql b/internal/eventstore/handler/v2/state_lock.sql
new file mode 100644
index 0000000000..55888e7f38
--- /dev/null
+++ b/internal/eventstore/handler/v2/state_lock.sql
@@ -0,0 +1,9 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , last_updated
+) VALUES (
+ $1
+ , $2
+ , now()
+) ON CONFLICT DO NOTHING;
\ No newline at end of file
diff --git a/internal/eventstore/handler/v2/state_set.sql b/internal/eventstore/handler/v2/state_set.sql
new file mode 100644
index 0000000000..3a80bc2002
--- /dev/null
+++ b/internal/eventstore/handler/v2/state_set.sql
@@ -0,0 +1,29 @@
+INSERT INTO projections.current_states (
+ projection_name
+ , instance_id
+ , aggregate_id
+ , aggregate_type
+ , "sequence"
+ , event_date
+ , "position"
+ , last_updated
+) VALUES (
+ $1
+ , $2
+ , $3
+ , $4
+ , $5
+ , $6
+ , $7
+ , now()
+) ON CONFLICT (
+ projection_name
+ , instance_id
+) DO UPDATE SET
+ aggregate_id = $3
+ , aggregate_type = $4
+ , "sequence" = $5
+ , event_date = $6
+ , "position" = $7
+ , last_updated = statement_timestamp()
+;
\ No newline at end of file
diff --git a/internal/eventstore/handler/v2/state_set_last_run.sql b/internal/eventstore/handler/v2/state_set_last_run.sql
new file mode 100644
index 0000000000..e632c47ba4
--- /dev/null
+++ b/internal/eventstore/handler/v2/state_set_last_run.sql
@@ -0,0 +1,2 @@
+UPDATE projections.current_states SET last_updated = now() WHERE projection_name = $1 AND instance_id = $2;
+
\ No newline at end of file
diff --git a/internal/eventstore/handler/v2/state_test.go b/internal/eventstore/handler/v2/state_test.go
new file mode 100644
index 0000000000..9432190661
--- /dev/null
+++ b/internal/eventstore/handler/v2/state_test.go
@@ -0,0 +1,447 @@
+package handler
+
+import (
+ "context"
+ "database/sql"
+ "database/sql/driver"
+ _ "embed"
+ "errors"
+ "reflect"
+ "testing"
+ "time"
+
+ "github.com/jackc/pgconn"
+
+ "github.com/zitadel/zitadel/internal/api/authz"
+ "github.com/zitadel/zitadel/internal/database/mock"
+ errs "github.com/zitadel/zitadel/internal/errors"
+)
+
+func TestHandler_lockState(t *testing.T) {
+ type fields struct {
+ projection Projection
+ mock *mock.SQLMock
+ }
+ type args struct {
+ instanceID string
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ isErr func(t *testing.T, err error)
+ }{
+ {
+ name: "tx closed",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExcpectExec(
+ lockStateStmt,
+ mock.WithExecArgs(
+ "projection",
+ "instance",
+ ),
+ mock.WithExecErr(sql.ErrTxDone),
+ ),
+ ),
+ },
+ args: args{
+ instanceID: "instance",
+ },
+ isErr: func(t *testing.T, err error) {
+ if !errors.Is(err, sql.ErrTxDone) {
+ t.Errorf("unexpected error, want: %v got: %v", sql.ErrTxDone, err)
+ }
+ },
+ },
+ {
+ name: "no rows affeced",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExcpectExec(
+ lockStateStmt,
+ mock.WithExecArgs(
+ "projection",
+ "instance",
+ ),
+ mock.WithExecNoRowsAffected(),
+ ),
+ ),
+ },
+ args: args{
+ instanceID: "instance",
+ },
+ isErr: func(t *testing.T, err error) {
+ if !errors.Is(err, errs.ThrowInternal(nil, "V2-lpiK0", "")) {
+ t.Errorf("unexpected error: want internal (V2lpiK0), got: %v", err)
+ }
+ },
+ },
+ {
+ name: "rows affected",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExcpectExec(
+ lockStateStmt,
+ mock.WithExecArgs(
+ "projection",
+ "instance",
+ ),
+ mock.WithExecRowsAffected(1),
+ ),
+ ),
+ },
+ args: args{
+ instanceID: "instance",
+ },
+ },
+ }
+ for _, tt := range tests {
+ if tt.isErr == nil {
+ tt.isErr = func(t *testing.T, err error) {
+ if err != nil {
+ t.Error("expected no error got:", err)
+ }
+ }
+ }
+ t.Run(tt.name, func(t *testing.T) {
+ h := &Handler{
+ projection: tt.fields.projection,
+ }
+
+ tx, err := tt.fields.mock.DB.Begin()
+ if err != nil {
+ t.Fatalf("unable to begin transaction: %v", err)
+ }
+
+ err = h.lockState(tx, tt.args.instanceID)
+ tt.isErr(t, err)
+
+ tt.fields.mock.Assert(t)
+ })
+ }
+}
+
+func TestHandler_updateLastUpdated(t *testing.T) {
+ type fields struct {
+ projection Projection
+ mock *mock.SQLMock
+ }
+ type args struct {
+ updatedState *state
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ isErr func(t *testing.T, err error)
+ }{
+ {
+ name: "update fails",
+ fields: fields{
+ projection: &projection{
+ name: "instance",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExcpectExec(updateStateStmt,
+ mock.WithExecErr(sql.ErrTxDone),
+ ),
+ ),
+ },
+ args: args{
+ updatedState: &state{
+ instanceID: "instance",
+ eventTimestamp: time.Now(),
+ position: 42,
+ },
+ },
+ isErr: func(t *testing.T, err error) {
+ if !errors.Is(err, sql.ErrTxDone) {
+ t.Errorf("unexpected error, want: %v, got %v", sql.ErrTxDone, err)
+ }
+ },
+ },
+ {
+ name: "no rows affected",
+ fields: fields{
+ projection: &projection{
+ name: "instance",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExcpectExec(updateStateStmt,
+ mock.WithExecNoRowsAffected(),
+ ),
+ ),
+ },
+ args: args{
+ updatedState: &state{
+ instanceID: "instance",
+ eventTimestamp: time.Now(),
+ position: 42,
+ },
+ },
+ isErr: func(t *testing.T, err error) {
+ if !errors.Is(err, errs.ThrowInternal(nil, "V2-FGEKi", "")) {
+ t.Errorf("unexpected error, want: %v, got %v", sql.ErrTxDone, err)
+ }
+ },
+ },
+ {
+ name: "success",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExcpectExec(updateStateStmt,
+ mock.WithExecArgs(
+ "projection",
+ "instance",
+ "aggregate id",
+ "aggregate type",
+ uint64(42),
+ mock.AnyType[time.Time]{},
+ float64(42),
+ ),
+ mock.WithExecRowsAffected(1),
+ ),
+ ),
+ },
+ args: args{
+ updatedState: &state{
+ instanceID: "instance",
+ eventTimestamp: time.Now(),
+ position: 42,
+ aggregateType: "aggregate type",
+ aggregateID: "aggregate id",
+ sequence: 42,
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ if tt.isErr == nil {
+ tt.isErr = func(t *testing.T, err error) {
+ if err != nil {
+ t.Error("expected no error got:", err)
+ }
+ }
+ }
+ t.Run(tt.name, func(t *testing.T) {
+ tx, err := tt.fields.mock.DB.Begin()
+ if err != nil {
+ t.Fatalf("unable to begin transaction: %v", err)
+ }
+
+ h := &Handler{
+ projection: tt.fields.projection,
+ }
+ err = h.setState(tx, tt.args.updatedState)
+
+ tt.isErr(t, err)
+ tt.fields.mock.Assert(t)
+ })
+ }
+}
+
+func TestHandler_currentState(t *testing.T) {
+ testTime := time.Now()
+ type fields struct {
+ projection Projection
+ mock *mock.SQLMock
+ }
+ type args struct {
+ ctx context.Context
+ }
+ type want struct {
+ currentState *state
+ isErr func(t *testing.T, err error)
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ want want
+ }{
+ {
+ name: "connection done",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExpectQuery(currentStateStmt,
+ mock.WithQueryArgs(
+ "instance",
+ "projection",
+ ),
+ mock.WithQueryErr(sql.ErrConnDone),
+ ),
+ ),
+ },
+ args: args{
+ ctx: authz.WithInstanceID(context.Background(), "instance"),
+ },
+ want: want{
+ isErr: func(t *testing.T, err error) {
+ if !errors.Is(err, sql.ErrConnDone) {
+ t.Errorf("unexpected error, want: %v, got: %v", sql.ErrConnDone, err)
+ }
+ },
+ },
+ },
+ {
+ name: "no row but lock err",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExpectQuery(currentStateStmt,
+ mock.WithQueryArgs(
+ "instance",
+ "projection",
+ ),
+ mock.WithQueryErr(sql.ErrNoRows),
+ ),
+ mock.ExcpectExec(lockStateStmt,
+ mock.WithExecArgs(
+ "projection",
+ "instance",
+ ),
+ mock.WithExecErr(sql.ErrTxDone),
+ ),
+ ),
+ },
+ args: args{
+ ctx: authz.WithInstanceID(context.Background(), "instance"),
+ },
+ want: want{
+ isErr: func(t *testing.T, err error) {
+ if !errors.Is(err, sql.ErrTxDone) {
+ t.Errorf("unexpected error, want: %v, got: %v", sql.ErrTxDone, err)
+ }
+ },
+ },
+ },
+ {
+ name: "state locked",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExpectQuery(currentStateStmt,
+ mock.WithQueryArgs(
+ "instance",
+ "projection",
+ ),
+ mock.WithQueryErr(&pgconn.PgError{Code: "55P03"}),
+ ),
+ ),
+ },
+ args: args{
+ ctx: authz.WithInstanceID(context.Background(), "instance"),
+ },
+ want: want{
+ isErr: func(t *testing.T, err error) {
+ pgErr := new(pgconn.PgError)
+ if !errors.As(err, &pgErr) {
+ t.Errorf("error should be PgErr but was %T", err)
+ return
+ }
+ if pgErr.Code != "55P03" {
+ t.Errorf("expected code 55P03 got: %s", pgErr.Code)
+ }
+ },
+ },
+ },
+ {
+ name: "success",
+ fields: fields{
+ projection: &projection{
+ name: "projection",
+ },
+ mock: mock.NewSQLMock(t,
+ mock.ExpectBegin(nil),
+ mock.ExpectQuery(currentStateStmt,
+ mock.WithQueryArgs(
+ "instance",
+ "projection",
+ ),
+ mock.WithQueryResult(
+ []string{"aggregate_id", "aggregate_type", "event_sequence", "event_date", "position"},
+ [][]driver.Value{
+ {
+ "aggregate id",
+ "aggregate type",
+ int64(42),
+ testTime,
+ float64(42),
+ },
+ },
+ ),
+ ),
+ ),
+ },
+ args: args{
+ ctx: authz.WithInstanceID(context.Background(), "instance"),
+ },
+ want: want{
+ currentState: &state{
+ instanceID: "instance",
+ eventTimestamp: testTime,
+ position: 42,
+ aggregateType: "aggregate type",
+ aggregateID: "aggregate id",
+ sequence: 42,
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ if tt.want.isErr == nil {
+ tt.want.isErr = func(t *testing.T, err error) {
+ if err != nil {
+ t.Error("expected no error got:", err)
+ }
+ }
+ }
+ t.Run(tt.name, func(t *testing.T) {
+ h := &Handler{
+ projection: tt.fields.projection,
+ }
+
+ tx, err := tt.fields.mock.DB.Begin()
+ if err != nil {
+ t.Fatalf("unable to begin transaction: %v", err)
+ }
+
+ gotCurrentState, err := h.currentState(tt.args.ctx, tx, new(triggerConfig))
+
+ tt.want.isErr(t, err)
+ if !reflect.DeepEqual(gotCurrentState, tt.want.currentState) {
+ t.Errorf("Handler.currentState() gotCurrentState = %v, want %v", gotCurrentState, tt.want.currentState)
+ }
+ tt.fields.mock.Assert(t)
+ })
+ }
+}
diff --git a/internal/eventstore/handler/crdb/statement.go b/internal/eventstore/handler/v2/statement.go
similarity index 52%
rename from internal/eventstore/handler/crdb/statement.go
rename to internal/eventstore/handler/v2/statement.go
index bc1d50d0fc..bea3c156a3 100644
--- a/internal/eventstore/handler/crdb/statement.go
+++ b/internal/eventstore/handler/v2/statement.go
@@ -1,41 +1,89 @@
-package crdb
+package handler
import (
"database/sql"
- "errors"
+ "encoding/json"
+ errs "errors"
"strconv"
"strings"
+ "time"
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/database"
- zitadel_errors "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
)
-type execOption func(*execConfig)
-type execConfig struct {
- tableName string
-
- args []interface{}
- err error
- ignoreNotFound bool
+func (h *Handler) eventsToStatements(tx *sql.Tx, events []eventstore.Event, currentState *state) (statements []*Statement, err error) {
+ statements = make([]*Statement, 0, len(events))
+ for _, event := range events {
+ statement, err := h.reduce(event)
+ if err != nil {
+ h.logEvent(event).WithError(err).Error("reduce failed")
+ if shouldContinue := h.handleFailedStmt(tx, currentState, failureFromEvent(event, err)); shouldContinue {
+ continue
+ }
+ return statements, err
+ }
+ statements = append(statements, statement)
+ }
+ return statements, nil
}
+func (h *Handler) reduce(event eventstore.Event) (*Statement, error) {
+ for _, reducer := range h.projection.Reducers() {
+ if reducer.Aggregate != event.Aggregate().Type {
+ continue
+ }
+ for _, reduce := range reducer.EventReducers {
+ if reduce.Event != event.Type() {
+ continue
+ }
+ return reduce.Reduce(event)
+ }
+ }
+ return NewNoOpStatement(event), nil
+}
+
+type Statement struct {
+ AggregateType eventstore.AggregateType
+ AggregateID string
+ Sequence uint64
+ Position float64
+ CreationDate time.Time
+ InstanceID string
+
+ Execute Exec
+}
+
+type Exec func(ex Executer, projectionName string) error
+
func WithTableSuffix(name string) func(*execConfig) {
return func(o *execConfig) {
o.tableName += "_" + name
}
}
-func WithIgnoreNotFound() func(*execConfig) {
- return func(o *execConfig) {
- o.ignoreNotFound = true
+var (
+ ErrNoProjection = errs.New("no projection")
+ ErrNoValues = errs.New("no values")
+ ErrNoCondition = errs.New("no condition")
+)
+
+func NewStatement(event eventstore.Event, e Exec) *Statement {
+ return &Statement{
+ AggregateType: event.Aggregate().Type,
+ Sequence: event.Sequence(),
+ Position: event.Position(),
+ AggregateID: event.Aggregate().ID,
+ CreationDate: event.CreatedAt(),
+ InstanceID: event.Aggregate().InstanceID,
+ Execute: e,
}
}
-func NewCreateStatement(event eventstore.Event, values []handler.Column, opts ...execOption) *handler.Statement {
+func NewCreateStatement(event eventstore.Event, values []Column, opts ...execOption) *Statement {
cols, params, args := columnsToQuery(values)
columnNames := strings.Join(cols, ", ")
valuesPlaceholder := strings.Join(params, ", ")
@@ -45,23 +93,17 @@ func NewCreateStatement(event eventstore.Event, values []handler.Column, opts ..
}
if len(values) == 0 {
- config.err = handler.ErrNoValues
+ config.err = ErrNoValues
}
q := func(config execConfig) string {
return "INSERT INTO " + config.tableName + " (" + columnNames + ") VALUES (" + valuesPlaceholder + ")"
}
- return &handler.Statement{
- AggregateType: event.Aggregate().Type,
- Sequence: event.Sequence(),
- PreviousSequence: event.PreviousAggregateTypeSequence(),
- InstanceID: event.Aggregate().InstanceID,
- Execute: exec(config, q, opts),
- }
+ return NewStatement(event, exec(config, q, opts))
}
-func NewUpsertStatement(event eventstore.Event, conflictCols []handler.Column, values []handler.Column, opts ...execOption) *handler.Statement {
+func NewUpsertStatement(event eventstore.Event, conflictCols []Column, values []Column, opts ...execOption) *Statement {
cols, params, args := columnsToQuery(values)
conflictTarget := make([]string, len(conflictCols))
@@ -74,12 +116,12 @@ func NewUpsertStatement(event eventstore.Event, conflictCols []handler.Column, v
}
if len(values) == 0 {
- config.err = handler.ErrNoValues
+ config.err = ErrNoValues
}
updateCols, updateVals := getUpdateCols(cols, conflictTarget)
if len(updateCols) == 0 || len(updateVals) == 0 {
- config.err = handler.ErrNoValues
+ config.err = ErrNoValues
}
q := func(config execConfig) string {
@@ -96,13 +138,7 @@ func NewUpsertStatement(event eventstore.Event, conflictCols []handler.Column, v
" ON CONFLICT (" + strings.Join(conflictTarget, ", ") + ") DO " + updateStmt
}
- return &handler.Statement{
- AggregateType: event.Aggregate().Type,
- Sequence: event.Sequence(),
- PreviousSequence: event.PreviousAggregateTypeSequence(),
- InstanceID: event.Aggregate().InstanceID,
- Execute: exec(config, q, opts),
- }
+ return NewStatement(event, exec(config, q, opts))
}
func getUpdateCols(cols, conflictTarget []string) (updateCols, updateVals []string) {
@@ -132,9 +168,9 @@ func getUpdateCols(cols, conflictTarget []string) (updateCols, updateVals []stri
return updateCols, updateVals
}
-func NewUpdateStatement(event eventstore.Event, values []handler.Column, conditions []handler.Condition, opts ...execOption) *handler.Statement {
+func NewUpdateStatement(event eventstore.Event, values []Column, conditions []Condition, opts ...execOption) *Statement {
cols, params, args := columnsToQuery(values)
- wheres, whereArgs := conditionsToWhere(conditions, len(args))
+ wheres, whereArgs := conditionsToWhere(conditions, len(args)+1)
args = append(args, whereArgs...)
config := execConfig{
@@ -142,11 +178,11 @@ func NewUpdateStatement(event eventstore.Event, values []handler.Column, conditi
}
if len(values) == 0 {
- config.err = handler.ErrNoValues
+ config.err = ErrNoValues
}
if len(conditions) == 0 {
- config.err = handler.ErrNoCondition
+ config.err = ErrNoCondition
}
q := func(config execConfig) string {
@@ -159,17 +195,11 @@ func NewUpdateStatement(event eventstore.Event, values []handler.Column, conditi
return "UPDATE " + config.tableName + " SET (" + strings.Join(cols, ", ") + ") = (" + strings.Join(params, ", ") + ") WHERE " + strings.Join(wheres, " AND ")
}
- return &handler.Statement{
- AggregateType: event.Aggregate().Type,
- Sequence: event.Sequence(),
- PreviousSequence: event.PreviousAggregateTypeSequence(),
- InstanceID: event.Aggregate().InstanceID,
- Execute: exec(config, q, opts),
- }
+ return NewStatement(event, exec(config, q, opts))
}
-func NewDeleteStatement(event eventstore.Event, conditions []handler.Condition, opts ...execOption) *handler.Statement {
- wheres, args := conditionsToWhere(conditions, 0)
+func NewDeleteStatement(event eventstore.Event, conditions []Condition, opts ...execOption) *Statement {
+ wheres, args := conditionsToWhere(conditions, 1)
wheresPlaceholders := strings.Join(wheres, " AND ")
@@ -178,32 +208,21 @@ func NewDeleteStatement(event eventstore.Event, conditions []handler.Condition,
}
if len(conditions) == 0 {
- config.err = handler.ErrNoCondition
+ config.err = ErrNoCondition
}
q := func(config execConfig) string {
return "DELETE FROM " + config.tableName + " WHERE " + wheresPlaceholders
}
- return &handler.Statement{
- AggregateType: event.Aggregate().Type,
- Sequence: event.Sequence(),
- PreviousSequence: event.PreviousAggregateTypeSequence(),
- InstanceID: event.Aggregate().InstanceID,
- Execute: exec(config, q, opts),
- }
+ return NewStatement(event, exec(config, q, opts))
}
-func NewNoOpStatement(event eventstore.Event) *handler.Statement {
- return &handler.Statement{
- AggregateType: event.Aggregate().Type,
- Sequence: event.Sequence(),
- PreviousSequence: event.PreviousAggregateTypeSequence(),
- InstanceID: event.Aggregate().InstanceID,
- }
+func NewNoOpStatement(event eventstore.Event) *Statement {
+ return NewStatement(event, nil)
}
-func NewMultiStatement(event eventstore.Event, opts ...func(eventstore.Event) Exec) *handler.Statement {
+func NewMultiStatement(event eventstore.Event, opts ...func(eventstore.Event) Exec) *Statement {
if len(opts) == 0 {
return NewNoOpStatement(event)
}
@@ -211,43 +230,47 @@ func NewMultiStatement(event eventstore.Event, opts ...func(eventstore.Event) Ex
for i, opt := range opts {
execs[i] = opt(event)
}
- return &handler.Statement{
- AggregateType: event.Aggregate().Type,
- Sequence: event.Sequence(),
- PreviousSequence: event.PreviousAggregateTypeSequence(),
- InstanceID: event.Aggregate().InstanceID,
- Execute: multiExec(execs),
+ return NewStatement(event, multiExec(execs))
+}
+
+func AddNoOpStatement() func(eventstore.Event) Exec {
+ return func(event eventstore.Event) Exec {
+ return NewNoOpStatement(event).Execute
}
}
-type Exec func(ex handler.Executer, projectionName string) error
-
-func AddCreateStatement(columns []handler.Column, opts ...execOption) func(eventstore.Event) Exec {
+func AddCreateStatement(columns []Column, opts ...execOption) func(eventstore.Event) Exec {
return func(event eventstore.Event) Exec {
return NewCreateStatement(event, columns, opts...).Execute
}
}
-func AddUpsertStatement(indexCols []handler.Column, values []handler.Column, opts ...execOption) func(eventstore.Event) Exec {
+func AddUpsertStatement(indexCols []Column, values []Column, opts ...execOption) func(eventstore.Event) Exec {
return func(event eventstore.Event) Exec {
return NewUpsertStatement(event, indexCols, values, opts...).Execute
}
}
-func AddUpdateStatement(values []handler.Column, conditions []handler.Condition, opts ...execOption) func(eventstore.Event) Exec {
+func AddUpdateStatement(values []Column, conditions []Condition, opts ...execOption) func(eventstore.Event) Exec {
return func(event eventstore.Event) Exec {
return NewUpdateStatement(event, values, conditions, opts...).Execute
}
}
-func AddDeleteStatement(conditions []handler.Condition, opts ...execOption) func(eventstore.Event) Exec {
+func AddDeleteStatement(conditions []Condition, opts ...execOption) func(eventstore.Event) Exec {
return func(event eventstore.Event) Exec {
return NewDeleteStatement(event, conditions, opts...).Execute
}
}
-func NewArrayAppendCol(column string, value interface{}) handler.Column {
- return handler.Column{
+func AddCopyStatement(conflict, from, to []Column, conditions []NamespacedCondition, opts ...execOption) func(eventstore.Event) Exec {
+ return func(event eventstore.Event) Exec {
+ return NewCopyStatement(event, conflict, from, to, conditions, opts...).Execute
+ }
+}
+
+func NewArrayAppendCol(column string, value interface{}) Column {
+ return Column{
Name: column,
Value: value,
ParameterOpt: func(placeholder string) string {
@@ -256,8 +279,8 @@ func NewArrayAppendCol(column string, value interface{}) handler.Column {
}
}
-func NewArrayRemoveCol(column string, value interface{}) handler.Column {
- return handler.Column{
+func NewArrayRemoveCol(column string, value interface{}) Column {
+ return Column{
Name: column,
Value: value,
ParameterOpt: func(placeholder string) string {
@@ -266,15 +289,15 @@ func NewArrayRemoveCol(column string, value interface{}) handler.Column {
}
}
-func NewArrayIntersectCol(column string, value interface{}) handler.Column {
+func NewArrayIntersectCol(column string, value interface{}) Column {
var arrayType string
switch value.(type) {
- case []string, database.StringArray:
+ case []string, database.TextArray[string]:
arrayType = "TEXT"
//TODO: handle more types if necessary
}
- return handler.Column{
+ return Column{
Name: column,
Value: value,
ParameterOpt: func(placeholder string) string {
@@ -283,38 +306,10 @@ func NewArrayIntersectCol(column string, value interface{}) handler.Column {
}
}
-func NewCopyCol(column, from string) handler.Column {
- return handler.Column{
+func NewCopyCol(column, from string) Column {
+ return Column{
Name: column,
- Value: handler.NewCol(from, nil),
- }
-}
-
-func NewLessThanCond(column string, value interface{}) handler.Condition {
- return func(param string) (string, interface{}) {
- return column + " < " + param, value
- }
-}
-
-func NewIsNullCond(column string) handler.Condition {
- return func(param string) (string, interface{}) {
- return column + " IS NULL", nil
- }
-}
-
-// NewTextArrayContainsCond returns a handler.Condition that checks if the column that stores an array of text contains the given value
-func NewTextArrayContainsCond(column string, value string) handler.Condition {
- return func(param string) (string, interface{}) {
- return column + " @> " + param, database.StringArray{value}
- }
-}
-
-// Not is a function and not a method, so that calling it is well readable
-// For example conditions := []handler.Condition{ Not(NewTextArrayContainsCond())}
-func Not(condition handler.Condition) handler.Condition {
- return func(param string) (string, interface{}) {
- cond, value := condition(param)
- return "NOT (" + cond + ")", value
+ Value: NewCol(from, nil),
}
}
@@ -323,7 +318,7 @@ func Not(condition handler.Condition) handler.Condition {
// if the value of a col is empty the data will be copied from the selected row
// if the value of a col is not empty the data will be set by the static value
// conds represent the conditions for the selection subquery
-func NewCopyStatement(event eventstore.Event, conflictCols, from, to []handler.Column, nsCond []handler.NamespacedCondition, opts ...execOption) *handler.Statement {
+func NewCopyStatement(event eventstore.Event, conflictCols, from, to []Column, nsCond []NamespacedCondition, opts ...execOption) *Statement {
columnNames := make([]string, len(to))
selectColumns := make([]string, len(from))
updateColumns := make([]string, len(columnNames))
@@ -342,11 +337,11 @@ func NewCopyStatement(event eventstore.Event, conflictCols, from, to []handler.C
}
}
- cond := make([]handler.Condition, len(nsCond))
+ cond := make([]Condition, len(nsCond))
for i := range nsCond {
cond[i] = nsCond[i]("copy_table")
}
- wheres, values := conditionsToWhere(cond, len(args))
+ wheres, values := conditionsToWhere(cond, len(args)+1)
args = append(args, values...)
conflictTargets := make([]string, len(conflictCols))
@@ -359,11 +354,11 @@ func NewCopyStatement(event eventstore.Event, conflictCols, from, to []handler.C
}
if len(from) == 0 || len(to) == 0 || len(from) != len(to) {
- config.err = handler.ErrNoValues
+ config.err = ErrNoValues
}
if len(cond) == 0 {
- config.err = handler.ErrNoCondition
+ config.err = ErrNoCondition
}
q := func(config execConfig) string {
@@ -385,23 +380,17 @@ func NewCopyStatement(event eventstore.Event, conflictCols, from, to []handler.C
")"
}
- return &handler.Statement{
- AggregateType: event.Aggregate().Type,
- Sequence: event.Sequence(),
- PreviousSequence: event.PreviousAggregateTypeSequence(),
- InstanceID: event.Aggregate().InstanceID,
- Execute: exec(config, q, opts),
- }
+ return NewStatement(event, exec(config, q, opts))
}
-func columnsToQuery(cols []handler.Column) (names []string, parameters []string, values []interface{}) {
+func columnsToQuery(cols []Column) (names []string, parameters []string, values []interface{}) {
names = make([]string, len(cols))
values = make([]interface{}, len(cols))
parameters = make([]string, len(cols))
var parameterIndex int
for i, col := range cols {
names[i] = col.Name
- if c, ok := col.Value.(handler.Column); ok {
+ if c, ok := col.Value.(Column); ok {
parameters[i] = c.Name
continue
} else {
@@ -416,25 +405,105 @@ func columnsToQuery(cols []handler.Column) (names []string, parameters []string,
return names, parameters, values[:parameterIndex]
}
-func conditionsToWhere(conditions []handler.Condition, paramOffset int) (wheres []string, values []interface{}) {
- wheres = make([]string, len(conditions))
- values = make([]interface{}, 0, len(conditions))
- for i, conditionFunc := range conditions {
- condition, value := conditionFunc("$" + strconv.Itoa(i+1+paramOffset))
- wheres[i] = "(" + condition + ")"
- if value != nil {
- values = append(values, value)
- }
+func conditionsToWhere(conds []Condition, paramOffset int) (wheres []string, values []interface{}) {
+ wheres = make([]string, len(conds))
+ values = make([]any, 0, len(conds))
+
+ for i, cond := range conds {
+ var args []any
+ wheres[i], args = cond("$" + strconv.Itoa(paramOffset))
+ paramOffset += len(args)
+ values = append(values, args...)
+ wheres[i] = "(" + wheres[i] + ")"
}
+
return wheres, values
}
+type Column struct {
+ Name string
+ Value interface{}
+ ParameterOpt func(string) string
+}
+
+func NewCol(name string, value interface{}) Column {
+ return Column{
+ Name: name,
+ Value: value,
+ }
+}
+
+func NewJSONCol(name string, value interface{}) Column {
+ marshalled, err := json.Marshal(value)
+ if err != nil {
+ logging.WithFields("column", name).WithError(err).Panic("unable to marshal column")
+ }
+
+ return NewCol(name, marshalled)
+}
+
+type Condition func(param string) (string, []any)
+
+type NamespacedCondition func(namespace string) Condition
+
+func NewCond(name string, value interface{}) Condition {
+ return func(param string) (string, []any) {
+ return name + " = " + param, []any{value}
+ }
+}
+
+func NewNamespacedCondition(name string, value interface{}) NamespacedCondition {
+ return func(namespace string) Condition {
+ return NewCond(namespace+"."+name, value)
+ }
+}
+
+func NewLessThanCond(column string, value interface{}) Condition {
+ return func(param string) (string, []any) {
+ return column + " < " + param, []any{value}
+ }
+}
+
+func NewIsNullCond(column string) Condition {
+ return func(string) (string, []any) {
+ return column + " IS NULL", nil
+ }
+}
+
+// NewTextArrayContainsCond returns a Condition that checks if the column that stores an array of text contains the given value
+func NewTextArrayContainsCond(column string, value string) Condition {
+ return func(param string) (string, []any) {
+ return column + " @> " + param, []any{database.TextArray[string]{value}}
+ }
+}
+
+// Not is a function and not a method, so that calling it is well readable
+// For example conditions := []Condition{ Not(NewTextArrayContainsCond())}
+func Not(condition Condition) Condition {
+ return func(param string) (string, []any) {
+ cond, value := condition(param)
+ return "NOT (" + cond + ")", value
+ }
+}
+
+type Executer interface {
+ Exec(string, ...interface{}) (sql.Result, error)
+}
+
+type execOption func(*execConfig)
+type execConfig struct {
+ tableName string
+
+ args []interface{}
+ err error
+}
+
type query func(config execConfig) string
func exec(config execConfig, q query, opts []execOption) Exec {
- return func(ex handler.Executer, projectionName string) error {
+ return func(ex Executer, projectionName string) (err error) {
if projectionName == "" {
- return handler.ErrNoProjection
+ return ErrNoProjection
}
if config.err != nil {
@@ -446,12 +515,21 @@ func exec(config execConfig, q query, opts []execOption) Exec {
opt(&config)
}
- if _, err := ex.Exec(q(config), config.args...); err != nil {
- if config.ignoreNotFound && errors.Is(err, sql.ErrNoRows) {
- logging.WithError(err).Debugf("ignored not found: %v", err)
- return nil
+ _, err = ex.Exec("SAVEPOINT stmt_exec")
+ if err != nil {
+ return errors.ThrowInternal(err, "CRDB-YdOXD", "create savepoint failed")
+ }
+ defer func() {
+ if err != nil {
+ _, rollbackErr := ex.Exec("ROLLBACK TO SAVEPOINT stmt_exec")
+ logging.OnError(rollbackErr).Debug("rollback failed")
+ return
}
- return zitadel_errors.ThrowInternal(err, "CRDB-pKtsr", "exec failed")
+ _, err = ex.Exec("RELEASE SAVEPOINT stmt_exec")
+ }()
+ _, err = ex.Exec(q(config), config.args...)
+ if err != nil {
+ return errors.ThrowInternal(err, "CRDB-pKtsr", "exec failed")
}
return nil
@@ -459,8 +537,11 @@ func exec(config execConfig, q query, opts []execOption) Exec {
}
func multiExec(execList []Exec) Exec {
- return func(ex handler.Executer, projectionName string) error {
+ return func(ex Executer, projectionName string) error {
for _, exec := range execList {
+ if exec == nil {
+ continue
+ }
if err := exec(ex, projectionName); err != nil {
return err
}
diff --git a/internal/eventstore/handler/crdb/statement_test.go b/internal/eventstore/handler/v2/statement_test.go
similarity index 80%
rename from internal/eventstore/handler/crdb/statement_test.go
rename to internal/eventstore/handler/v2/statement_test.go
index e023f0079e..940da53b2b 100644
--- a/internal/eventstore/handler/crdb/statement_test.go
+++ b/internal/eventstore/handler/v2/statement_test.go
@@ -1,14 +1,14 @@
-package crdb
+package handler
import (
"database/sql"
"errors"
"reflect"
+ "strings"
"testing"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
)
type wantExecuter struct {
@@ -24,21 +24,50 @@ type params struct {
args []interface{}
}
-var errTestErr = errors.New("some error")
+var errTest = errors.New("some error")
+
+var _ eventstore.Event = &testEvent{}
+
+type testEvent struct {
+ eventstore.BaseEvent
+ sequence uint64
+ previousSequence uint64
+ aggregateType eventstore.AggregateType
+ instanceID string
+}
+
+func (e *testEvent) Sequence() uint64 {
+ return e.sequence
+}
+
+func (e *testEvent) Aggregate() *eventstore.Aggregate {
+ return &eventstore.Aggregate{
+ Type: e.aggregateType,
+ InstanceID: e.instanceID,
+ }
+}
+
+func (e *testEvent) PreviousAggregateTypeSequence() uint64 {
+ return e.previousSequence
+}
func (ex *wantExecuter) check(t *testing.T) {
t.Helper()
- if ex.wasExecuted && !ex.shouldExecute {
+ switch {
+ case ex.wasExecuted && !ex.shouldExecute:
t.Error("executer should not be executed")
- } else if !ex.wasExecuted && ex.shouldExecute {
+ case !ex.wasExecuted && ex.shouldExecute:
t.Error("executer should be executed")
- } else if ex.wasExecuted != ex.shouldExecute {
+ case ex.wasExecuted != ex.shouldExecute:
t.Errorf("executed missmatched should be %t, but was %t", ex.shouldExecute, ex.wasExecuted)
}
}
func (ex *wantExecuter) Exec(query string, args ...interface{}) (sql.Result, error) {
ex.t.Helper()
+ if strings.Contains(query, "SAVEPOINT") {
+ return nil, nil
+ }
ex.wasExecuted = true
if ex.i >= len(ex.params) {
ex.t.Errorf("did not expect more exec, but got:\n %q with %q", query, args)
@@ -59,7 +88,7 @@ func TestNewCreateStatement(t *testing.T) {
type args struct {
table string
event *testEvent
- values []handler.Column
+ values []Column
}
type want struct {
aggregateType eventstore.AggregateType
@@ -83,7 +112,7 @@ func TestNewCreateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
@@ -99,7 +128,7 @@ func TestNewCreateStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoProjection)
+ return errors.Is(err, ErrNoProjection)
},
},
},
@@ -112,7 +141,7 @@ func TestNewCreateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{},
+ values: []Column{},
},
want: want{
table: "my_table",
@@ -123,7 +152,7 @@ func TestNewCreateStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoValues)
+ return errors.Is(err, ErrNoValues)
},
},
},
@@ -136,7 +165,7 @@ func TestNewCreateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
@@ -181,8 +210,8 @@ func TestNewUpsertStatement(t *testing.T) {
type args struct {
table string
event *testEvent
- conflictCols []handler.Column
- values []handler.Column
+ conflictCols []Column
+ values []Column
}
type want struct {
aggregateType eventstore.AggregateType
@@ -206,7 +235,7 @@ func TestNewUpsertStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
@@ -222,7 +251,7 @@ func TestNewUpsertStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoProjection)
+ return errors.Is(err, ErrNoProjection)
},
},
},
@@ -235,7 +264,7 @@ func TestNewUpsertStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{},
+ values: []Column{},
},
want: want{
table: "my_table",
@@ -246,7 +275,7 @@ func TestNewUpsertStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoValues)
+ return errors.Is(err, ErrNoValues)
},
},
},
@@ -259,10 +288,10 @@ func TestNewUpsertStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conflictCols: []handler.Column{
- handler.NewCol("col1", nil),
+ conflictCols: []Column{
+ NewCol("col1", nil),
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
@@ -278,7 +307,7 @@ func TestNewUpsertStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoValues)
+ return errors.Is(err, ErrNoValues)
},
},
},
@@ -291,10 +320,10 @@ func TestNewUpsertStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conflictCols: []handler.Column{
- handler.NewCol("col1", nil),
+ conflictCols: []Column{
+ NewCol("col1", nil),
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
@@ -337,10 +366,10 @@ func TestNewUpsertStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conflictCols: []handler.Column{
- handler.NewCol("col1", nil),
+ conflictCols: []Column{
+ NewCol("col1", nil),
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
@@ -389,8 +418,8 @@ func TestNewUpdateStatement(t *testing.T) {
type args struct {
table string
event *testEvent
- values []handler.Column
- conditions []handler.Condition
+ values []Column
+ conditions []Condition
}
type want struct {
table string
@@ -414,14 +443,14 @@ func TestNewUpdateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
},
},
- conditions: []handler.Condition{
- handler.NewCond("col2", 1),
+ conditions: []Condition{
+ NewCond("col2", 1),
},
},
want: want{
@@ -433,7 +462,7 @@ func TestNewUpdateStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoProjection)
+ return errors.Is(err, ErrNoProjection)
},
},
},
@@ -446,9 +475,9 @@ func TestNewUpdateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{},
- conditions: []handler.Condition{
- handler.NewCond("col2", 1),
+ values: []Column{},
+ conditions: []Condition{
+ NewCond("col2", 1),
},
},
want: want{
@@ -460,7 +489,7 @@ func TestNewUpdateStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoValues)
+ return errors.Is(err, ErrNoValues)
},
},
},
@@ -473,13 +502,13 @@ func TestNewUpdateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
},
},
- conditions: []handler.Condition{},
+ conditions: []Condition{},
},
want: want{
table: "my_table",
@@ -490,7 +519,7 @@ func TestNewUpdateStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoCondition)
+ return errors.Is(err, ErrNoCondition)
},
},
},
@@ -503,14 +532,14 @@ func TestNewUpdateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
},
},
- conditions: []handler.Condition{
- handler.NewCond("col2", 1),
+ conditions: []Condition{
+ NewCond("col2", 1),
},
},
want: want{
@@ -541,7 +570,7 @@ func TestNewUpdateStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- values: []handler.Column{
+ values: []Column{
{
Name: "col1",
Value: "val",
@@ -551,8 +580,8 @@ func TestNewUpdateStatement(t *testing.T) {
Value: "val5",
},
},
- conditions: []handler.Condition{
- handler.NewCond("col2", 1),
+ conditions: []Condition{
+ NewCond("col2", 1),
},
},
want: want{
@@ -593,7 +622,7 @@ func TestNewDeleteStatement(t *testing.T) {
type args struct {
table string
event *testEvent
- conditions []handler.Condition
+ conditions []Condition
}
type want struct {
@@ -618,8 +647,8 @@ func TestNewDeleteStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conditions: []handler.Condition{
- handler.NewCond("col2", 1),
+ conditions: []Condition{
+ NewCond("col2", 1),
},
},
want: want{
@@ -631,7 +660,7 @@ func TestNewDeleteStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoProjection)
+ return errors.Is(err, ErrNoProjection)
},
},
},
@@ -644,7 +673,7 @@ func TestNewDeleteStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conditions: []handler.Condition{},
+ conditions: []Condition{},
},
want: want{
table: "my_table",
@@ -655,7 +684,7 @@ func TestNewDeleteStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoCondition)
+ return errors.Is(err, ErrNoCondition)
},
},
},
@@ -668,8 +697,8 @@ func TestNewDeleteStatement(t *testing.T) {
previousSequence: 0,
aggregateType: "agg",
},
- conditions: []handler.Condition{
- handler.NewCond("col1", 1),
+ conditions: []Condition{
+ NewCond("col1", 1),
},
},
want: want{
@@ -709,11 +738,16 @@ func TestNewDeleteStatement(t *testing.T) {
func TestNewNoOpStatement(t *testing.T) {
type args struct {
event *testEvent
+ table string
+ }
+ type want struct {
+ executer *wantExecuter
+ isErr func(error) bool
}
tests := []struct {
name string
args args
- want *handler.Statement
+ want want
}{
{
name: "generate correctly",
@@ -725,20 +759,29 @@ func TestNewNoOpStatement(t *testing.T) {
instanceID: "instanceID",
},
},
- want: &handler.Statement{
- AggregateType: "agg",
- Execute: nil,
- Sequence: 5,
- PreviousSequence: 3,
- InstanceID: "instanceID",
+ want: want{
+ executer: nil,
+ isErr: func(err error) bool {
+ return err == nil
+ },
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- if got := NewNoOpStatement(tt.args.event); !reflect.DeepEqual(got, tt.want) {
- t.Errorf("NewNoOpStatement() = %v, want %v", got, tt.want)
+ stmt := NewNoOpStatement(tt.args.event)
+ if tt.want.executer != nil && stmt.Execute == nil {
+ t.Error("expected executer, but was nil")
}
+ if stmt.Execute == nil {
+ return
+ }
+ tt.want.executer.t = t
+ err := stmt.Execute(tt.want.executer, tt.args.table)
+ if !tt.want.isErr(err) {
+ t.Errorf("unexpected error: %v", err)
+ }
+ tt.want.executer.check(t)
})
}
}
@@ -772,10 +815,17 @@ func TestNewMultiStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- execs: nil,
+ execs: []func(eventstore.Event) Exec{
+ AddNoOpStatement(),
+ },
},
want: want{
- executer: nil,
+ executer: &wantExecuter{
+ shouldExecute: false,
+ },
+ isErr: func(err error) bool {
+ return err == nil
+ },
},
},
{
@@ -789,10 +839,10 @@ func TestNewMultiStatement(t *testing.T) {
},
execs: []func(eventstore.Event) Exec{
AddDeleteStatement(
- []handler.Condition{},
+ []Condition{},
),
AddCreateStatement(
- []handler.Column{
+ []Column{
{
Name: "col1",
Value: 1,
@@ -809,7 +859,7 @@ func TestNewMultiStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoCondition)
+ return errors.Is(err, ErrNoCondition)
},
},
},
@@ -824,22 +874,21 @@ func TestNewMultiStatement(t *testing.T) {
},
execs: []func(eventstore.Event) Exec{
AddDeleteStatement(
- []handler.Condition{
- handler.NewCond("col1", 1),
- },
- ),
+ []Condition{
+ NewCond("col1", 1),
+ }),
AddCreateStatement(
- []handler.Column{
+ []Column{
{
Name: "col1",
Value: 1,
},
}),
AddUpsertStatement(
- []handler.Column{
- handler.NewCol("col1", nil),
+ []Column{
+ NewCol("col1", nil),
},
- []handler.Column{
+ []Column{
{
Name: "col1",
Value: 1,
@@ -850,16 +899,15 @@ func TestNewMultiStatement(t *testing.T) {
},
}),
AddUpdateStatement(
- []handler.Column{
+ []Column{
{
Name: "col1",
Value: 1,
},
},
- []handler.Condition{
- handler.NewCond("col1", 1),
- },
- ),
+ []Condition{
+ NewCond("col1", 1),
+ }),
},
},
want: want{
@@ -918,10 +966,10 @@ func TestNewCopyStatement(t *testing.T) {
type args struct {
table string
event *testEvent
- conflictingCols []handler.Column
- from []handler.Column
- to []handler.Column
- conds []handler.NamespacedCondition
+ conflictingCols []Column
+ from []Column
+ to []Column
+ conds []NamespacedCondition
}
type want struct {
aggregateType eventstore.AggregateType
@@ -945,8 +993,8 @@ func TestNewCopyStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conds: []handler.NamespacedCondition{
- handler.NewNamespacedCondition("col2", 1),
+ conds: []NamespacedCondition{
+ NewNamespacedCondition("col2", 1),
},
},
want: want{
@@ -958,7 +1006,7 @@ func TestNewCopyStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoProjection)
+ return errors.Is(err, ErrNoProjection)
},
},
},
@@ -971,13 +1019,13 @@ func TestNewCopyStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conds: []handler.NamespacedCondition{},
- from: []handler.Column{
+ conds: []NamespacedCondition{},
+ from: []Column{
{
Name: "col",
},
},
- to: []handler.Column{
+ to: []Column{
{
Name: "col",
},
@@ -992,7 +1040,7 @@ func TestNewCopyStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoCondition)
+ return errors.Is(err, ErrNoCondition)
},
},
},
@@ -1005,13 +1053,13 @@ func TestNewCopyStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conds: []handler.NamespacedCondition{},
- from: []handler.Column{
+ conds: []NamespacedCondition{},
+ from: []Column{
{
Name: "col",
},
},
- to: []handler.Column{
+ to: []Column{
{
Name: "col",
},
@@ -1029,7 +1077,7 @@ func TestNewCopyStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoCondition)
+ return errors.Is(err, ErrNoCondition)
},
},
},
@@ -1042,10 +1090,10 @@ func TestNewCopyStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- conds: []handler.NamespacedCondition{
- handler.NewNamespacedCondition("col2", nil),
+ conds: []NamespacedCondition{
+ NewNamespacedCondition("col2", nil),
},
- from: []handler.Column{},
+ from: []Column{},
},
want: want{
table: "my_table",
@@ -1056,7 +1104,7 @@ func TestNewCopyStatement(t *testing.T) {
shouldExecute: false,
},
isErr: func(err error) bool {
- return errors.Is(err, handler.ErrNoValues)
+ return errors.Is(err, ErrNoValues)
},
},
},
@@ -1069,7 +1117,7 @@ func TestNewCopyStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- from: []handler.Column{
+ from: []Column{
{
Name: "state",
Value: 1,
@@ -1084,7 +1132,7 @@ func TestNewCopyStatement(t *testing.T) {
Name: "col_b",
},
},
- to: []handler.Column{
+ to: []Column{
{
Name: "state",
},
@@ -1098,9 +1146,9 @@ func TestNewCopyStatement(t *testing.T) {
Name: "col_b",
},
},
- conds: []handler.NamespacedCondition{
- handler.NewNamespacedCondition("id", 2),
- handler.NewNamespacedCondition("state", 3),
+ conds: []NamespacedCondition{
+ NewNamespacedCondition("id", 2),
+ NewNamespacedCondition("state", 3),
},
},
want: want{
@@ -1131,7 +1179,7 @@ func TestNewCopyStatement(t *testing.T) {
sequence: 1,
previousSequence: 0,
},
- from: []handler.Column{
+ from: []Column{
{
Value: 1,
},
@@ -1145,7 +1193,7 @@ func TestNewCopyStatement(t *testing.T) {
Name: "col_b",
},
},
- to: []handler.Column{
+ to: []Column{
{
Name: "state",
},
@@ -1159,9 +1207,9 @@ func TestNewCopyStatement(t *testing.T) {
Name: "col_d",
},
},
- conds: []handler.NamespacedCondition{
- handler.NewNamespacedCondition("id", 2),
- handler.NewNamespacedCondition("state", 3),
+ conds: []NamespacedCondition{
+ NewNamespacedCondition("id", 2),
+ NewNamespacedCondition("state", 3),
},
},
want: want{
@@ -1200,7 +1248,7 @@ func TestNewCopyStatement(t *testing.T) {
func TestStatement_Execute(t *testing.T) {
type fields struct {
- execute func(ex handler.Executer, projectionName string) error
+ execute func(ex Executer, projectionName string) error
}
type want struct {
isErr func(error) bool
@@ -1217,7 +1265,7 @@ func TestStatement_Execute(t *testing.T) {
{
name: "execute returns no error",
fields: fields{
- execute: func(ex handler.Executer, projectionName string) error { return nil },
+ execute: func(ex Executer, projectionName string) error { return nil },
},
args: args{
projectionName: "my_projection",
@@ -1234,18 +1282,18 @@ func TestStatement_Execute(t *testing.T) {
projectionName: "my_projection",
},
fields: fields{
- execute: func(ex handler.Executer, projectionName string) error { return errTestErr },
+ execute: func(ex Executer, projectionName string) error { return errTest },
},
want: want{
isErr: func(err error) bool {
- return errors.Is(err, errTestErr)
+ return errors.Is(err, errTest)
},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- stmt := &handler.Statement{
+ stmt := &Statement{
Execute: tt.fields.execute,
}
if err := stmt.Execute(nil, tt.args.projectionName); !tt.want.isErr(err) {
@@ -1257,7 +1305,7 @@ func TestStatement_Execute(t *testing.T) {
func Test_columnsToQuery(t *testing.T) {
type args struct {
- cols []handler.Column
+ cols []Column
}
type want struct {
names []string
@@ -1281,7 +1329,7 @@ func Test_columnsToQuery(t *testing.T) {
{
name: "one column",
args: args{
- cols: []handler.Column{
+ cols: []Column{
{
Name: "col1",
Value: 1,
@@ -1297,7 +1345,7 @@ func Test_columnsToQuery(t *testing.T) {
{
name: "multiple columns",
args: args{
- cols: []handler.Column{
+ cols: []Column{
{
Name: "col1",
Value: 1,
@@ -1317,14 +1365,14 @@ func Test_columnsToQuery(t *testing.T) {
{
name: "with copy column",
args: args{
- cols: []handler.Column{
+ cols: []Column{
{
Name: "col1",
Value: 1,
},
{
Name: "col2",
- Value: handler.Column{
+ Value: Column{
Name: "col1",
},
},
@@ -1357,9 +1405,9 @@ func Test_columnsToQuery(t *testing.T) {
}
}
-func Test_conditionsToWhere(t *testing.T) {
+func Test_columnsToWhere(t *testing.T) {
type args struct {
- conds []handler.Condition
+ conds []Condition
paramOffset int
}
type want struct {
@@ -1382,10 +1430,10 @@ func Test_conditionsToWhere(t *testing.T) {
{
name: "no offset",
args: args{
- conds: []handler.Condition{
- handler.NewCond("col1", "val1"),
+ conds: []Condition{
+ NewCond("col1", "val1"),
},
- paramOffset: 0,
+ paramOffset: 1,
},
want: want{
wheres: []string{"(col1 = $1)"},
@@ -1395,11 +1443,11 @@ func Test_conditionsToWhere(t *testing.T) {
{
name: "multiple cols",
args: args{
- conds: []handler.Condition{
- handler.NewCond("col1", "val1"),
- handler.NewCond("col2", "val2"),
+ conds: []Condition{
+ NewCond("col1", "val1"),
+ NewCond("col2", "val2"),
},
- paramOffset: 0,
+ paramOffset: 1,
},
want: want{
wheres: []string{"(col1 = $1)", "(col2 = $2)"},
@@ -1409,10 +1457,10 @@ func Test_conditionsToWhere(t *testing.T) {
{
name: "2 offset",
args: args{
- conds: []handler.Condition{
- handler.NewCond("col1", "val1"),
+ conds: []Condition{
+ NewCond("col1", "val1"),
},
- paramOffset: 2,
+ paramOffset: 3,
},
want: want{
wheres: []string{"(col1 = $3)"},
@@ -1422,9 +1470,10 @@ func Test_conditionsToWhere(t *testing.T) {
{
name: "less than",
args: args{
- conds: []handler.Condition{
+ conds: []Condition{
NewLessThanCond("col1", "val1"),
},
+ paramOffset: 1,
},
want: want{
wheres: []string{"(col1 < $1)"},
@@ -1434,7 +1483,7 @@ func Test_conditionsToWhere(t *testing.T) {
{
name: "is null",
args: args{
- conds: []handler.Condition{
+ conds: []Condition{
NewIsNullCond("col1"),
},
},
@@ -1446,21 +1495,23 @@ func Test_conditionsToWhere(t *testing.T) {
{
name: "text array contains",
args: args{
- conds: []handler.Condition{
+ conds: []Condition{
NewTextArrayContainsCond("col1", "val1"),
},
+ paramOffset: 1,
},
want: want{
wheres: []string{"(col1 @> $1)"},
- values: []interface{}{database.StringArray{"val1"}},
+ values: []interface{}{database.TextArray[string]{"val1"}},
},
},
{
name: "not",
args: args{
- conds: []handler.Condition{
- Not(handler.NewCond("col1", "val1")),
+ conds: []Condition{
+ Not(NewCond("col1", "val1")),
},
+ paramOffset: 1,
},
want: want{
wheres: []string{"(NOT (col1 = $1))"},
@@ -1490,7 +1541,7 @@ func TestParameterOpts(t *testing.T) {
tests := []struct {
name string
args args
- constructor func(column string, value interface{}) handler.Column
+ constructor func(column string, value interface{}) Column
want string
}{
{
@@ -1523,3 +1574,60 @@ func TestParameterOpts(t *testing.T) {
})
}
}
+
+// func TestHandler_reduce(t *testing.T) {
+// type fields struct {
+// projection Projection
+// }
+// type args struct {
+// event eventstore.Event
+// }
+// tests := []struct {
+// name string
+// fields fields
+// args args
+// isErr func(t *testing.T, err error)
+// shouldBeCalled bool
+// }{
+// {
+// name: "",
+// fields: fields{
+// projection: &projection{
+// reducers: []AggregateReducer{
+// {
+// Aggregate: "aggregate",
+// EventRedusers: []EventReducer{
+// {
+// Event: "event",
+// Reduce: (&mockEventReducer{
+// statement: new(Statement),
+// }).reduce,
+// },
+// },
+// },
+// },
+// },
+// },
+// },
+// }
+// for _, tt := range tests {
+// if tt.isErr == nil {
+// tt.isErr = func(t *testing.T, err error) {
+// if err != nil {
+// t.Error("expected no error got:", err)
+// }
+// }
+// }
+// t.Run(tt.name, func(t *testing.T) {
+// h := &Handler{
+// projection: tt.fields.projection,
+// }
+// got, err := h.reduce(tt.args.event)
+// tt.isErr(t, err)
+// if tt.shouldBeCalled != tt.
+// if !reflect.DeepEqual(got, tt.want) {
+// t.Errorf("Handler.reduce() = %v, want %v", got, tt.want)
+// }
+// })
+// }
+// }
diff --git a/internal/eventstore/local_crdb_test.go b/internal/eventstore/local_crdb_test.go
index 85dc78aea8..81ca937287 100644
--- a/internal/eventstore/local_crdb_test.go
+++ b/internal/eventstore/local_crdb_test.go
@@ -1,7 +1,9 @@
package eventstore_test
import (
+ "context"
"database/sql"
+ "encoding/json"
"os"
"testing"
"time"
@@ -12,10 +14,16 @@ import (
"github.com/zitadel/zitadel/cmd/initialise"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/database/cockroach"
+ "github.com/zitadel/zitadel/internal/eventstore"
+ es_sql "github.com/zitadel/zitadel/internal/eventstore/repository/sql"
+ new_es "github.com/zitadel/zitadel/internal/eventstore/v3"
)
var (
testCRDBClient *database.DB
+ queriers map[string]eventstore.Querier = make(map[string]eventstore.Querier)
+ pushers map[string]eventstore.Pusher = make(map[string]eventstore.Pusher)
+ clients map[string]*database.DB = make(map[string]*database.DB)
)
func TestMain(m *testing.M) {
@@ -27,31 +35,44 @@ func TestMain(m *testing.M) {
testCRDBClient = &database.DB{
Database: new(testDB),
}
-
testCRDBClient.DB, err = sql.Open("postgres", ts.PGURL().String())
if err != nil {
logging.WithFields("error", err).Fatal("unable to connect to db")
}
- if err != nil {
- logging.WithFields("error", err).Fatal("unable to connect to db")
- }
if err = testCRDBClient.Ping(); err != nil {
logging.WithFields("error", err).Fatal("unable to ping db")
}
+ v2 := &es_sql.CRDB{DB: testCRDBClient}
+ queriers["v2(inmemory)"] = v2
+ clients["v2(inmemory)"] = testCRDBClient
+
+ pushers["v3(inmemory)"] = new_es.NewEventstore(testCRDBClient)
+ clients["v3(inmemory)"] = testCRDBClient
+
+ if localDB, err := connectLocalhost(); err == nil {
+ if err = initDB(localDB); err != nil {
+ logging.WithFields("error", err).Fatal("migrations failed")
+ }
+ pushers["v3(singlenode)"] = new_es.NewEventstore(localDB)
+ clients["v3(singlenode)"] = localDB
+ }
+
+ // pushers["v2(inmemory)"] = v2
+
defer func() {
testCRDBClient.Close()
ts.Stop()
}()
- if err = initDB(testCRDBClient.DB); err != nil {
+ if err = initDB(testCRDBClient); err != nil {
logging.WithFields("error", err).Fatal("migrations failed")
}
os.Exit(m.Run())
}
-func initDB(db *sql.DB) error {
+func initDB(db *database.DB) error {
initialise.ReadStmts("cockroach")
config := new(database.Config)
config.SetConnector(&cockroach.Config{
@@ -67,7 +88,28 @@ func initDB(db *sql.DB) error {
if err != nil {
return err
}
- return initialise.VerifyZitadel(db, *config)
+ err = initialise.VerifyZitadel(db, *config)
+ if err != nil {
+ return err
+ }
+ // create old events
+ _, err = db.Exec(oldEventsTable)
+ return err
+}
+
+func connectLocalhost() (*database.DB, error) {
+ client, err := sql.Open("pgx", "postgresql://root@localhost:26257/defaultdb?sslmode=disable")
+ if err != nil {
+ return nil, err
+ }
+ if err = client.Ping(); err != nil {
+ return nil, err
+ }
+
+ return &database.DB{
+ DB: client,
+ Database: new(testDB),
+ }, nil
}
type testDB struct{}
@@ -78,4 +120,122 @@ func (*testDB) DatabaseName() string { return "db" }
func (*testDB) Username() string { return "user" }
-func (*testDB) Type() string { return "type" }
+func (*testDB) Type() string { return "cockroach" }
+
+func generateCommand(aggregateType eventstore.AggregateType, aggregateID string, opts ...func(*testEvent)) eventstore.Command {
+ e := &testEvent{
+ BaseEvent: eventstore.BaseEvent{
+ Agg: &eventstore.Aggregate{
+ ID: aggregateID,
+ Type: aggregateType,
+ ResourceOwner: "ro",
+ Version: "v1",
+ },
+ Service: "svc",
+ EventType: "test.created",
+ },
+ }
+
+ for _, opt := range opts {
+ opt(e)
+ }
+
+ return e
+}
+
+type testEvent struct {
+ eventstore.BaseEvent
+ uniqueConstraints []*eventstore.UniqueConstraint
+}
+
+func (e *testEvent) Payload() any {
+ return e.BaseEvent.Data
+}
+
+func (e *testEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return e.uniqueConstraints
+}
+
+func canceledCtx() context.Context {
+ ctx, cancel := context.WithCancel(context.Background())
+ cancel()
+ return ctx
+}
+
+func fillUniqueData(unique_type, field, instanceID string) error {
+ _, err := testCRDBClient.Exec("INSERT INTO eventstore.unique_constraints (unique_type, unique_field, instance_id) VALUES ($1, $2, $3)", unique_type, field, instanceID)
+ return err
+}
+
+func generateAddUniqueConstraint(table, uniqueField string) func(e *testEvent) {
+ return func(e *testEvent) {
+ e.uniqueConstraints = append(e.uniqueConstraints,
+ &eventstore.UniqueConstraint{
+ UniqueType: table,
+ UniqueField: uniqueField,
+ Action: eventstore.UniqueConstraintAdd,
+ },
+ )
+ }
+}
+
+func generateRemoveUniqueConstraint(table, uniqueField string) func(e *testEvent) {
+ return func(e *testEvent) {
+ e.uniqueConstraints = append(e.uniqueConstraints,
+ &eventstore.UniqueConstraint{
+ UniqueType: table,
+ UniqueField: uniqueField,
+ Action: eventstore.UniqueConstraintRemove,
+ },
+ )
+ }
+}
+
+func withTestData(data any) func(e *testEvent) {
+ return func(e *testEvent) {
+ d, err := json.Marshal(data)
+ if err != nil {
+ panic("marshal data failed")
+ }
+ e.BaseEvent.Data = d
+ }
+}
+
+func cleanupEventstore(client *database.DB) func() {
+ return func() {
+ _, err := client.Exec("TRUNCATE eventstore.events")
+ if err != nil {
+ logging.Warnf("unable to truncate events: %v", err)
+ }
+ _, err = client.Exec("TRUNCATE eventstore.events2")
+ if err != nil {
+ logging.Warnf("unable to truncate events: %v", err)
+ }
+ _, err = client.Exec("TRUNCATE eventstore.unique_constraints")
+ if err != nil {
+ logging.Warnf("unable to truncate unique constraints: %v", err)
+ }
+ }
+}
+
+const oldEventsTable = `CREATE TABLE IF NOT EXISTS eventstore.events (
+ id UUID DEFAULT gen_random_uuid()
+ , event_type TEXT NOT NULL
+ , aggregate_type TEXT NOT NULL
+ , aggregate_id TEXT NOT NULL
+ , aggregate_version TEXT NOT NULL
+ , event_sequence BIGINT NOT NULL
+ , previous_aggregate_sequence BIGINT
+ , previous_aggregate_type_sequence INT8
+ , creation_date TIMESTAMPTZ NOT NULL DEFAULT now()
+ , created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()
+ , event_data JSONB
+ , editor_user TEXT NOT NULL
+ , editor_service TEXT
+ , resource_owner TEXT NOT NULL
+ , instance_id TEXT NOT NULL
+ , "position" DECIMAL NOT NULL
+ , in_tx_order INTEGER NOT NULL
+
+ , PRIMARY KEY (instance_id, aggregate_type, aggregate_id, event_sequence DESC)
+);`
diff --git a/internal/eventstore/read_model.go b/internal/eventstore/read_model.go
index 3e07743fac..6bf7dcf4fc 100644
--- a/internal/eventstore/read_model.go
+++ b/internal/eventstore/read_model.go
@@ -39,9 +39,9 @@ func (rm *ReadModel) Reduce() error {
}
if rm.CreationDate.IsZero() {
- rm.CreationDate = rm.Events[0].CreationDate()
+ rm.CreationDate = rm.Events[0].CreatedAt()
}
- rm.ChangeDate = rm.Events[len(rm.Events)-1].CreationDate()
+ rm.ChangeDate = rm.Events[len(rm.Events)-1].CreatedAt()
rm.ProcessedSequence = rm.Events[len(rm.Events)-1].Sequence()
// all events processed and not needed anymore
rm.Events = nil
diff --git a/internal/eventstore/repository/event.go b/internal/eventstore/repository/event.go
index 8583c6d3fc..d55661f157 100644
--- a/internal/eventstore/repository/event.go
+++ b/internal/eventstore/repository/event.go
@@ -2,24 +2,23 @@ package repository
import (
"database/sql"
+ "encoding/json"
"time"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
-//Event represents all information about a manipulation of an aggregate
+var _ eventstore.Event = (*Event)(nil)
+
+// Event represents all information about a manipulation of an aggregate
type Event struct {
//ID is a generated uuid for this event
ID string
- //Sequence is the sequence of the event
- Sequence uint64
-
- //PreviousAggregateSequence is the sequence of the previous sequence of the aggregate (e.g. org.250989)
- // if it's 0 then it's the first event of this aggregate
- PreviousAggregateSequence uint64
-
- //PreviousAggregateTypeSequence is the sequence of the previous sequence of the aggregate root (e.g. org)
- // the first event of the aggregate has previous aggregate root sequence 0
- PreviousAggregateTypeSequence uint64
+ // Seq is the sequence of the event
+ Seq uint64
+ // Pos is the global sequence of the event multiple events can have the same sequence
+ Pos float64
//CreationDate is the time the event is created
// it's used for human readability.
@@ -27,17 +26,14 @@ type Event struct {
// time drifts in different services could cause integrity problems
CreationDate time.Time
- //Type describes the cause of the event (e.g. user.added)
+ // Typ describes the cause of the event (e.g. user.added)
// it should always be in past-form
- Type EventType
+ Typ eventstore.EventType
//Data describe the changed fields (e.g. userName = "hodor")
// data must always a pointer to a struct, a struct or a byte array containing json bytes
Data []byte
- //EditorService should be a unique identifier for the service which created the event
- // it's meant for maintainability
- EditorService string
//EditorUser should be a unique identifier for the user which created the event
// it's meant for maintainability.
// It's recommend to use the aggregate id of the user
@@ -45,13 +41,13 @@ type Event struct {
//Version describes the definition of the aggregate at a certain point in time
// it's used in read models to reduce the events in the correct definition
- Version Version
+ Version eventstore.Version
//AggregateID id is the unique identifier of the aggregate
// the client must generate it by it's own
AggregateID string
//AggregateType describes the meaning of the aggregate for this event
// it could an object like user
- AggregateType AggregateType
+ AggregateType eventstore.AggregateType
//ResourceOwner is the organisation which owns this aggregate
// an aggregate can only be managed by one organisation
// use the ID of the org
@@ -59,10 +55,68 @@ type Event struct {
//InstanceID is the instance where this event belongs to
// use the ID of the instance
InstanceID string
+
+ Constraints []*eventstore.UniqueConstraint
}
-//EventType is the description of the change
-type EventType string
+// Aggregate implements [eventstore.Event]
+func (e *Event) Aggregate() *eventstore.Aggregate {
+ return &eventstore.Aggregate{
+ ID: e.AggregateID,
+ Type: e.AggregateType,
+ ResourceOwner: e.ResourceOwner.String,
+ InstanceID: e.InstanceID,
+ Version: e.Version,
+ }
+}
-//AggregateType is the object name
-type AggregateType string
+// Creator implements [eventstore.Event]
+func (e *Event) Creator() string {
+ return e.EditorUser
+}
+
+// Type implements [eventstore.Event]
+func (e *Event) Type() eventstore.EventType {
+ return e.Typ
+}
+
+// Revision implements [eventstore.Event]
+func (e *Event) Revision() uint16 {
+ return 0
+}
+
+// Sequence implements [eventstore.Event]
+func (e *Event) Sequence() uint64 {
+ return e.Seq
+}
+
+// Position implements [eventstore.Event]
+func (e *Event) Position() float64 {
+ return e.Pos
+}
+
+// CreatedAt implements [eventstore.Event]
+func (e *Event) CreatedAt() time.Time {
+ return e.CreationDate
+}
+
+// Unmarshal implements [eventstore.Event]
+func (e *Event) Unmarshal(ptr any) error {
+ if len(e.Data) == 0 {
+ return nil
+ }
+ return json.Unmarshal(e.Data, ptr)
+}
+
+// DataAsBytes implements [eventstore.Event]
+func (e *Event) DataAsBytes() []byte {
+ return e.Data
+}
+
+func (e *Event) Payload() any {
+ return e.Data
+}
+
+func (e *Event) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return e.Constraints
+}
diff --git a/internal/eventstore/repository/mock/gen_mock.go b/internal/eventstore/repository/mock/gen_mock.go
index 73714228cb..1895e26c64 100644
--- a/internal/eventstore/repository/mock/gen_mock.go
+++ b/internal/eventstore/repository/mock/gen_mock.go
@@ -1,3 +1,3 @@
package mock
-//go:generate mockgen -package mock -destination ./repository.mock.go github.com/zitadel/zitadel/internal/eventstore/repository Repository
+//go:generate mockgen -package mock -destination ./repository.mock.go github.com/zitadel/zitadel/internal/eventstore Querier,Pusher
diff --git a/internal/eventstore/repository/mock/repository.mock.go b/internal/eventstore/repository/mock/repository.mock.go
index 663e3a49fe..f2b4fb089a 100644
--- a/internal/eventstore/repository/mock/repository.mock.go
+++ b/internal/eventstore/repository/mock/repository.mock.go
@@ -1,5 +1,5 @@
// Code generated by MockGen. DO NOT EDIT.
-// Source: github.com/zitadel/zitadel/internal/eventstore/repository (interfaces: Repository)
+// Source: github.com/zitadel/zitadel/internal/eventstore (interfaces: Querier,Pusher)
// Package mock is a generated GoMock package.
package mock
@@ -9,63 +9,49 @@ import (
reflect "reflect"
gomock "github.com/golang/mock/gomock"
- repository "github.com/zitadel/zitadel/internal/eventstore/repository"
+ eventstore "github.com/zitadel/zitadel/internal/eventstore"
)
-// MockRepository is a mock of Repository interface.
-type MockRepository struct {
+// MockQuerier is a mock of Querier interface.
+type MockQuerier struct {
ctrl *gomock.Controller
- recorder *MockRepositoryMockRecorder
+ recorder *MockQuerierMockRecorder
}
-// MockRepositoryMockRecorder is the mock recorder for MockRepository.
-type MockRepositoryMockRecorder struct {
- mock *MockRepository
+// MockQuerierMockRecorder is the mock recorder for MockQuerier.
+type MockQuerierMockRecorder struct {
+ mock *MockQuerier
}
-// NewMockRepository creates a new mock instance.
-func NewMockRepository(ctrl *gomock.Controller) *MockRepository {
- mock := &MockRepository{ctrl: ctrl}
- mock.recorder = &MockRepositoryMockRecorder{mock}
+// NewMockQuerier creates a new mock instance.
+func NewMockQuerier(ctrl *gomock.Controller) *MockQuerier {
+ mock := &MockQuerier{ctrl: ctrl}
+ mock.recorder = &MockQuerierMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder {
+func (m *MockQuerier) EXPECT() *MockQuerierMockRecorder {
return m.recorder
}
-// CreateInstance mocks base method.
-func (m *MockRepository) CreateInstance(arg0 context.Context, arg1 string) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "CreateInstance", arg0, arg1)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// CreateInstance indicates an expected call of CreateInstance.
-func (mr *MockRepositoryMockRecorder) CreateInstance(arg0, arg1 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CreateInstance", reflect.TypeOf((*MockRepository)(nil).CreateInstance), arg0, arg1)
-}
-
// Filter mocks base method.
-func (m *MockRepository) Filter(arg0 context.Context, arg1 *repository.SearchQuery) ([]*repository.Event, error) {
+func (m *MockQuerier) Filter(arg0 context.Context, arg1 *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Filter", arg0, arg1)
- ret0, _ := ret[0].([]*repository.Event)
+ ret0, _ := ret[0].([]eventstore.Event)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// Filter indicates an expected call of Filter.
-func (mr *MockRepositoryMockRecorder) Filter(arg0, arg1 interface{}) *gomock.Call {
+func (mr *MockQuerierMockRecorder) Filter(arg0, arg1 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Filter", reflect.TypeOf((*MockRepository)(nil).Filter), arg0, arg1)
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Filter", reflect.TypeOf((*MockQuerier)(nil).Filter), arg0, arg1)
}
// Health mocks base method.
-func (m *MockRepository) Health(arg0 context.Context) error {
+func (m *MockQuerier) Health(arg0 context.Context) error {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "Health", arg0)
ret0, _ := ret[0].(error)
@@ -73,13 +59,13 @@ func (m *MockRepository) Health(arg0 context.Context) error {
}
// Health indicates an expected call of Health.
-func (mr *MockRepositoryMockRecorder) Health(arg0 interface{}) *gomock.Call {
+func (mr *MockQuerierMockRecorder) Health(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockRepository)(nil).Health), arg0)
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockQuerier)(nil).Health), arg0)
}
// InstanceIDs mocks base method.
-func (m *MockRepository) InstanceIDs(arg0 context.Context, arg1 *repository.SearchQuery) ([]string, error) {
+func (m *MockQuerier) InstanceIDs(arg0 context.Context, arg1 *eventstore.SearchQueryBuilder) ([]string, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "InstanceIDs", arg0, arg1)
ret0, _ := ret[0].([]string)
@@ -88,41 +74,79 @@ func (m *MockRepository) InstanceIDs(arg0 context.Context, arg1 *repository.Sear
}
// InstanceIDs indicates an expected call of InstanceIDs.
-func (mr *MockRepositoryMockRecorder) InstanceIDs(arg0, arg1 interface{}) *gomock.Call {
+func (mr *MockQuerierMockRecorder) InstanceIDs(arg0, arg1 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InstanceIDs", reflect.TypeOf((*MockRepository)(nil).InstanceIDs), arg0, arg1)
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InstanceIDs", reflect.TypeOf((*MockQuerier)(nil).InstanceIDs), arg0, arg1)
}
// LatestSequence mocks base method.
-func (m *MockRepository) LatestSequence(arg0 context.Context, arg1 *repository.SearchQuery) (uint64, error) {
+func (m *MockQuerier) LatestSequence(arg0 context.Context, arg1 *eventstore.SearchQueryBuilder) (float64, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "LatestSequence", arg0, arg1)
- ret0, _ := ret[0].(uint64)
+ ret0, _ := ret[0].(float64)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// LatestSequence indicates an expected call of LatestSequence.
-func (mr *MockRepositoryMockRecorder) LatestSequence(arg0, arg1 interface{}) *gomock.Call {
+func (mr *MockQuerierMockRecorder) LatestSequence(arg0, arg1 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LatestSequence", reflect.TypeOf((*MockRepository)(nil).LatestSequence), arg0, arg1)
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LatestSequence", reflect.TypeOf((*MockQuerier)(nil).LatestSequence), arg0, arg1)
}
-// Push mocks base method.
-func (m *MockRepository) Push(arg0 context.Context, arg1 []*repository.Event, arg2 ...*repository.UniqueConstraint) error {
+// MockPusher is a mock of Pusher interface.
+type MockPusher struct {
+ ctrl *gomock.Controller
+ recorder *MockPusherMockRecorder
+}
+
+// MockPusherMockRecorder is the mock recorder for MockPusher.
+type MockPusherMockRecorder struct {
+ mock *MockPusher
+}
+
+// NewMockPusher creates a new mock instance.
+func NewMockPusher(ctrl *gomock.Controller) *MockPusher {
+ mock := &MockPusher{ctrl: ctrl}
+ mock.recorder = &MockPusherMockRecorder{mock}
+ return mock
+}
+
+// EXPECT returns an object that allows the caller to indicate expected use.
+func (m *MockPusher) EXPECT() *MockPusherMockRecorder {
+ return m.recorder
+}
+
+// Health mocks base method.
+func (m *MockPusher) Health(arg0 context.Context) error {
m.ctrl.T.Helper()
- varargs := []interface{}{arg0, arg1}
- for _, a := range arg2 {
- varargs = append(varargs, a)
- }
- ret := m.ctrl.Call(m, "Push", varargs...)
+ ret := m.ctrl.Call(m, "Health", arg0)
ret0, _ := ret[0].(error)
return ret0
}
-// Push indicates an expected call of Push.
-func (mr *MockRepositoryMockRecorder) Push(arg0, arg1 interface{}, arg2 ...interface{}) *gomock.Call {
+// Health indicates an expected call of Health.
+func (mr *MockPusherMockRecorder) Health(arg0 interface{}) *gomock.Call {
mr.mock.ctrl.T.Helper()
- varargs := append([]interface{}{arg0, arg1}, arg2...)
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Push", reflect.TypeOf((*MockRepository)(nil).Push), varargs...)
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockPusher)(nil).Health), arg0)
+}
+
+// Push mocks base method.
+func (m *MockPusher) Push(arg0 context.Context, arg1 ...eventstore.Command) ([]eventstore.Event, error) {
+ m.ctrl.T.Helper()
+ varargs := []interface{}{arg0}
+ for _, a := range arg1 {
+ varargs = append(varargs, a)
+ }
+ ret := m.ctrl.Call(m, "Push", varargs...)
+ ret0, _ := ret[0].([]eventstore.Event)
+ ret1, _ := ret[1].(error)
+ return ret0, ret1
+}
+
+// Push indicates an expected call of Push.
+func (mr *MockPusherMockRecorder) Push(arg0 interface{}, arg1 ...interface{}) *gomock.Call {
+ mr.mock.ctrl.T.Helper()
+ varargs := append([]interface{}{arg0}, arg1...)
+ return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Push", reflect.TypeOf((*MockPusher)(nil).Push), varargs...)
}
diff --git a/internal/eventstore/repository/mock/repository.mock.impl.go b/internal/eventstore/repository/mock/repository.mock.impl.go
index e21f4fd7c3..b6d5eabbd8 100644
--- a/internal/eventstore/repository/mock/repository.mock.impl.go
+++ b/internal/eventstore/repository/mock/repository.mock.impl.go
@@ -2,92 +2,208 @@ package mock
import (
"context"
+ "encoding/json"
+ "fmt"
"testing"
+ "time"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
)
+type MockRepository struct {
+ *MockPusher
+ *MockQuerier
+}
+
func NewRepo(t *testing.T) *MockRepository {
- return NewMockRepository(gomock.NewController(t))
+ controller := gomock.NewController(t)
+ return &MockRepository{
+ MockPusher: NewMockPusher(controller),
+ MockQuerier: NewMockQuerier(controller),
+ }
}
func (m *MockRepository) ExpectFilterNoEventsNoError() *MockRepository {
- m.EXPECT().Filter(gomock.Any(), gomock.Any()).Return(nil, nil)
+ m.MockQuerier.ctrl.T.Helper()
+
+ m.MockQuerier.EXPECT().Filter(gomock.Any(), gomock.Any()).Return(nil, nil)
return m
}
-func (m *MockRepository) ExpectFilterEvents(events ...*repository.Event) *MockRepository {
- m.EXPECT().Filter(gomock.Any(), gomock.Any()).Return(events, nil)
+func (m *MockRepository) ExpectFilterEvents(events ...eventstore.Event) *MockRepository {
+ m.MockQuerier.ctrl.T.Helper()
+
+ m.MockQuerier.EXPECT().Filter(gomock.Any(), gomock.Any()).Return(events, nil)
return m
}
func (m *MockRepository) ExpectFilterEventsError(err error) *MockRepository {
- m.EXPECT().Filter(gomock.Any(), gomock.Any()).Return(nil, err)
+ m.MockQuerier.ctrl.T.Helper()
+
+ m.MockQuerier.EXPECT().Filter(gomock.Any(), gomock.Any()).Return(nil, err)
return m
}
func (m *MockRepository) ExpectInstanceIDs(hasFilters []*repository.Filter, instanceIDs ...string) *MockRepository {
+ m.MockQuerier.ctrl.T.Helper()
+
matcher := gomock.Any()
if len(hasFilters) > 0 {
- matcher = &filterQueryMatcher{Filters: [][]*repository.Filter{hasFilters}}
+ matcher = &filterQueryMatcher{SubQueries: [][]*repository.Filter{hasFilters}}
}
- m.EXPECT().InstanceIDs(gomock.Any(), matcher).Return(instanceIDs, nil)
+ m.MockQuerier.EXPECT().InstanceIDs(gomock.Any(), matcher).Return(instanceIDs, nil)
return m
}
func (m *MockRepository) ExpectInstanceIDsError(err error) *MockRepository {
- m.EXPECT().InstanceIDs(gomock.Any(), gomock.Any()).Return(nil, err)
+ m.MockQuerier.ctrl.T.Helper()
+
+ m.MockQuerier.EXPECT().InstanceIDs(gomock.Any(), gomock.Any()).Return(nil, err)
return m
}
-func (m *MockRepository) ExpectPush(expectedEvents []*repository.Event, expectedUniqueConstraints ...*repository.UniqueConstraint) *MockRepository {
- m.EXPECT().Push(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
- func(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error {
- assert.Equal(m.ctrl.T, expectedEvents, events)
- if expectedUniqueConstraints == nil {
- expectedUniqueConstraints = []*repository.UniqueConstraint{}
+func (m *MockRepository) ExpectPush(expectedCommands []eventstore.Command) *MockRepository {
+ m.MockPusher.EXPECT().Push(gomock.Any(), gomock.Any()).DoAndReturn(
+ func(ctx context.Context, commands ...eventstore.Command) ([]eventstore.Event, error) {
+ m.MockPusher.ctrl.T.Helper()
+
+ if len(expectedCommands) != len(commands) {
+ return nil, fmt.Errorf("unexpected amount of commands: want %d, got %d", len(expectedCommands), len(commands))
}
- assert.Equal(m.ctrl.T, expectedUniqueConstraints, uniqueConstraints)
- return nil
- },
- )
- return m
-}
+ for i, expectedCommand := range expectedCommands {
+ if !assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Aggregate(), commands[i].Aggregate()) {
+ m.MockPusher.ctrl.T.Errorf("invalid command.Aggregate [%d]: expected: %#v got: %#v", i, expectedCommand.Aggregate(), commands[i].Aggregate())
+ }
+ if !assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Creator(), commands[i].Creator()) {
+ m.MockPusher.ctrl.T.Errorf("invalid command.Creator [%d]: expected: %#v got: %#v", i, expectedCommand.Creator(), commands[i].Creator())
+ }
+ if !assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Type(), commands[i].Type()) {
+ m.MockPusher.ctrl.T.Errorf("invalid command.Type [%d]: expected: %#v got: %#v", i, expectedCommand.Type(), commands[i].Type())
+ }
+ if !assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Revision(), commands[i].Revision()) {
+ m.MockPusher.ctrl.T.Errorf("invalid command.Revision [%d]: expected: %#v got: %#v", i, expectedCommand.Revision(), commands[i].Revision())
+ }
-func (m *MockRepository) ExpectPushFailed(err error, expectedEvents []*repository.Event, expectedUniqueConstraints ...*repository.UniqueConstraint) *MockRepository {
- m.EXPECT().Push(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
- func(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error {
- assert.Equal(m.ctrl.T, expectedEvents, events)
- if expectedUniqueConstraints == nil {
- expectedUniqueConstraints = []*repository.UniqueConstraint{}
+ var expectedPayload []byte
+ expectedPayload, ok := expectedCommand.Payload().([]byte)
+ if !ok {
+ expectedPayload, _ = json.Marshal(expectedCommand.Payload())
+ }
+ if string(expectedPayload) == "" {
+ expectedPayload = []byte("null")
+ }
+ gotPayload, _ := json.Marshal(commands[i].Payload())
+
+ if !assert.Equal(m.MockPusher.ctrl.T, expectedPayload, gotPayload) {
+ m.MockPusher.ctrl.T.Errorf("invalid command.Payload [%d]: expected: %#v got: %#v", i, expectedCommand.Payload(), commands[i].Payload())
+ }
+ if !assert.ElementsMatch(m.MockPusher.ctrl.T, expectedCommand.UniqueConstraints(), commands[i].UniqueConstraints()) {
+ m.MockPusher.ctrl.T.Errorf("invalid command.UniqueConstraints [%d]: expected: %#v got: %#v", i, expectedCommand.UniqueConstraints(), commands[i].UniqueConstraints())
+ }
}
- assert.Equal(m.ctrl.T, expectedUniqueConstraints, uniqueConstraints)
- return err
+ events := make([]eventstore.Event, len(commands))
+ for i, command := range commands {
+ events[i] = &mockEvent{
+ Command: command,
+ }
+ }
+ return events, nil
},
)
return m
}
-func (m *MockRepository) ExpectRandomPush(expectedEvents []*repository.Event, expectedUniqueConstraints ...*repository.UniqueConstraint) *MockRepository {
- m.EXPECT().Push(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
- func(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error {
- assert.Len(m.ctrl.T, events, len(expectedEvents))
- assert.Len(m.ctrl.T, expectedUniqueConstraints, len(uniqueConstraints))
- return nil
+func (m *MockRepository) ExpectPushFailed(err error, expectedCommands []eventstore.Command) *MockRepository {
+ m.MockPusher.ctrl.T.Helper()
+
+ m.MockPusher.EXPECT().Push(gomock.Any(), gomock.Any()).DoAndReturn(
+ func(ctx context.Context, commands ...eventstore.Command) ([]eventstore.Event, error) {
+ if len(expectedCommands) != len(commands) {
+ return nil, fmt.Errorf("unexpected amount of commands: want %d, got %d", len(expectedCommands), len(commands))
+ }
+ for i, expectedCommand := range expectedCommands {
+ assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Aggregate(), commands[i].Aggregate())
+ assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Creator(), commands[i].Creator())
+ assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Type(), commands[i].Type())
+ assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Revision(), commands[i].Revision())
+ assert.Equal(m.MockPusher.ctrl.T, expectedCommand.Payload(), commands[i].Payload())
+ assert.ElementsMatch(m.MockPusher.ctrl.T, expectedCommand.UniqueConstraints(), commands[i].UniqueConstraints())
+ }
+
+ return nil, err
},
)
return m
}
-func (m *MockRepository) ExpectRandomPushFailed(err error, expectedEvents []*repository.Event, expectedUniqueConstraints ...*repository.UniqueConstraint) *MockRepository {
- m.EXPECT().Push(gomock.Any(), gomock.Any(), gomock.Any()).DoAndReturn(
- func(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error {
- assert.Len(m.ctrl.T, events, len(expectedEvents))
- assert.Len(m.ctrl.T, expectedUniqueConstraints, len(uniqueConstraints))
- return err
+type mockEvent struct {
+ eventstore.Command
+ sequence uint64
+ createdAt time.Time
+}
+
+// DataAsBytes implements eventstore.Event
+func (e *mockEvent) DataAsBytes() []byte {
+ if e.Payload() == nil {
+ return nil
+ }
+ payload, err := json.Marshal(e.Payload())
+ if err != nil {
+ panic("unable to unmarshal")
+ }
+ return payload
+}
+
+func (e *mockEvent) Unmarshal(ptr any) error {
+ if e.Payload() == nil {
+ return nil
+ }
+ payload, err := json.Marshal(e.Payload())
+ if err != nil {
+ return err
+ }
+ return json.Unmarshal(payload, ptr)
+}
+
+func (e *mockEvent) Sequence() uint64 {
+ return e.sequence
+}
+
+func (e *mockEvent) Position() float64 {
+ return 0
+}
+
+func (e *mockEvent) CreatedAt() time.Time {
+ return e.createdAt
+}
+
+func (m *MockRepository) ExpectRandomPush(expectedCommands []eventstore.Command) *MockRepository {
+ m.MockPusher.EXPECT().Push(gomock.Any(), gomock.Any()).DoAndReturn(
+ func(ctx context.Context, commands ...eventstore.Command) ([]eventstore.Event, error) {
+ assert.Len(m.MockPusher.ctrl.T, commands, len(expectedCommands))
+
+ events := make([]eventstore.Event, len(commands))
+ for i, command := range commands {
+ events[i] = &mockEvent{
+ Command: command,
+ }
+ }
+
+ return events, nil
+ },
+ )
+ return m
+}
+
+func (m *MockRepository) ExpectRandomPushFailed(err error, expectedEvents []eventstore.Command) *MockRepository {
+ m.MockPusher.EXPECT().Push(gomock.Any(), gomock.Any()).DoAndReturn(
+ func(ctx context.Context, events ...eventstore.Command) ([]eventstore.Event, error) {
+ assert.Len(m.MockPusher.ctrl.T, events, len(expectedEvents))
+ return nil, err
},
)
return m
diff --git a/internal/eventstore/repository/mock/repository.mock.matcher.searchquery.go b/internal/eventstore/repository/mock/repository.mock.matcher.searchquery.go
index 7d82370751..f320161d8b 100644
--- a/internal/eventstore/repository/mock/repository.mock.matcher.searchquery.go
+++ b/internal/eventstore/repository/mock/repository.mock.matcher.searchquery.go
@@ -11,7 +11,7 @@ type filterQueryMatcher repository.SearchQuery
func (f *filterQueryMatcher) String() string {
var filterLists []string
- for _, filterSlice := range f.Filters {
+ for _, filterSlice := range f.SubQueries {
var str string
for _, filter := range filterSlice {
str += "," + (*filterMatcher)(filter).String()
@@ -24,15 +24,15 @@ func (f *filterQueryMatcher) String() string {
func (f *filterQueryMatcher) Matches(x interface{}) bool {
other := x.(*repository.SearchQuery)
- if len(f.Filters) != len(other.Filters) {
+ if len(f.SubQueries) != len(other.SubQueries) {
return false
}
- for filterSliceIdx, filterSlice := range f.Filters {
- if len(filterSlice) != len(other.Filters[filterSliceIdx]) {
+ for filterSliceIdx, filterSlice := range f.SubQueries {
+ if len(filterSlice) != len(other.SubQueries[filterSliceIdx]) {
return false
}
- for filterIdx, filter := range f.Filters[filterSliceIdx] {
- if !(*filterMatcher)(filter).Matches(other.Filters[filterSliceIdx][filterIdx]) {
+ for filterIdx, filter := range f.SubQueries[filterSliceIdx] {
+ if !(*filterMatcher)(filter).Matches(other.SubQueries[filterSliceIdx][filterIdx]) {
return false
}
}
diff --git a/internal/eventstore/repository/repository.go b/internal/eventstore/repository/repository.go
deleted file mode 100644
index 964b515257..0000000000
--- a/internal/eventstore/repository/repository.go
+++ /dev/null
@@ -1,23 +0,0 @@
-package repository
-
-import (
- "context"
-)
-
-//Repository pushes and filters events
-type Repository interface {
- //Health checks if the connection to the storage is available
- Health(ctx context.Context) error
- // Push adds all events of the given aggregates to the event streams of the aggregates.
- // if unique constraints are pushed, they will be added to the unique table for checking unique constraint violations
- // This call is transaction save. The transaction will be rolled back if one event fails
- Push(ctx context.Context, events []*Event, uniqueConstraints ...*UniqueConstraint) error
- // Filter returns all events matching the given search query
- Filter(ctx context.Context, searchQuery *SearchQuery) (events []*Event, err error)
- //LatestSequence returns the latest sequence found by the search query
- LatestSequence(ctx context.Context, queryFactory *SearchQuery) (uint64, error)
- //InstanceIDs returns the instance ids found by the search query
- InstanceIDs(ctx context.Context, queryFactory *SearchQuery) ([]string, error)
- //CreateInstance creates a new sequence for the given instance
- CreateInstance(ctx context.Context, instanceID string) error
-}
diff --git a/internal/eventstore/repository/search_query.go b/internal/eventstore/repository/search_query.go
index 2b315289ca..7c2ff31ebe 100644
--- a/internal/eventstore/repository/search_query.go
+++ b/internal/eventstore/repository/search_query.go
@@ -3,38 +3,29 @@ package repository
import (
"database/sql"
+ "github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
// SearchQuery defines the which and how data are queried
type SearchQuery struct {
- Columns Columns
- Limit uint64
- Desc bool
- Filters [][]*Filter
- Tx *sql.Tx
- AllowTimeTravel bool
-}
+ Columns eventstore.Columns
-// Columns defines which fields of the event are needed for the query
-type Columns int32
+ SubQueries [][]*Filter
+ Tx *sql.Tx
+ AllowTimeTravel bool
+ AwaitOpenTransactions bool
+ Limit uint64
+ Desc bool
-const (
- //ColumnsEvent represents all fields of an event
- ColumnsEvent = iota + 1
- //ColumnsMaxSequence represents the latest sequence of the filtered events
- ColumnsMaxSequence
- // ColumnsInstanceIDs represents the instance ids of the filtered events
- ColumnsInstanceIDs
-
- columnsCount
-)
-
-func (c Columns) Validate() error {
- if c <= 0 || c >= columnsCount {
- return errors.ThrowPreconditionFailed(nil, "REPOS-x8R35", "column out of range")
- }
- return nil
+ InstanceID *Filter
+ ExcludedInstances *Filter
+ Creator *Filter
+ Owner *Filter
+ Position *Filter
+ Sequence *Filter
+ CreatedAt *Filter
}
// Filter represents all fields needed to compare a field of an event with a value
@@ -88,6 +79,8 @@ const (
FieldEventData
//FieldCreationDate represents the creation date field
FieldCreationDate
+ // FieldPosition represents the field of the global sequence
+ FieldPosition
fieldCount
)
@@ -117,3 +110,164 @@ func (f *Filter) Validate() error {
}
return nil
}
+
+func QueryFromBuilder(builder *eventstore.SearchQueryBuilder) (*SearchQuery, error) {
+ if builder == nil ||
+ builder.GetColumns().Validate() != nil {
+ return nil, errors.ThrowPreconditionFailed(nil, "MODEL-4m9gs", "builder invalid")
+ }
+
+ query := &SearchQuery{
+ Columns: builder.GetColumns(),
+ Limit: builder.GetLimit(),
+ Desc: builder.GetDesc(),
+ Tx: builder.GetTx(),
+ AllowTimeTravel: builder.GetAllowTimeTravel(),
+ AwaitOpenTransactions: builder.GetAwaitOpenTransactions(),
+ // Queries: make([]*Filter, 0, 7),
+ SubQueries: make([][]*Filter, len(builder.GetQueries())),
+ }
+
+ for _, f := range []func(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter{
+ instanceIDFilter,
+ excludedInstanceIDFilter,
+ editorUserFilter,
+ resourceOwnerFilter,
+ positionAfterFilter,
+ eventSequenceGreaterFilter,
+ creationDateAfterFilter,
+ } {
+ filter := f(builder, query)
+ if filter == nil {
+ continue
+ }
+ if err := filter.Validate(); err != nil {
+ return nil, err
+ }
+ }
+
+ for i, q := range builder.GetQueries() {
+ for _, f := range []func(query *eventstore.SearchQuery) *Filter{
+ aggregateTypeFilter,
+ aggregateIDFilter,
+ eventTypeFilter,
+ eventDataFilter,
+ } {
+ filter := f(q)
+ if filter == nil {
+ continue
+ }
+ if err := filter.Validate(); err != nil {
+ return nil, err
+ }
+ query.SubQueries[i] = append(query.SubQueries[i], filter)
+ }
+ }
+
+ return query, nil
+}
+
+func eventSequenceGreaterFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
+ if builder.GetEventSequenceGreater() == 0 {
+ return nil
+ }
+ sortOrder := OperationGreater
+ if builder.GetDesc() {
+ sortOrder = OperationLess
+ }
+ query.Sequence = NewFilter(FieldSequence, builder.GetEventSequenceGreater(), sortOrder)
+ return query.Sequence
+}
+
+func excludedInstanceIDFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
+ if len(builder.GetExcludedInstanceIDs()) == 0 {
+ return nil
+ }
+ query.ExcludedInstances = NewFilter(FieldInstanceID, database.TextArray[string](builder.GetExcludedInstanceIDs()), OperationNotIn)
+ return query.ExcludedInstances
+}
+
+func creationDateAfterFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
+ if builder.GetCreationDateAfter().IsZero() {
+ return nil
+ }
+ query.CreatedAt = NewFilter(FieldCreationDate, builder.GetCreationDateAfter(), OperationGreater)
+ return query.CreatedAt
+}
+
+func resourceOwnerFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
+ if builder.GetResourceOwner() == "" {
+ return nil
+ }
+ query.Owner = NewFilter(FieldResourceOwner, builder.GetResourceOwner(), OperationEquals)
+ return query.Owner
+}
+
+func editorUserFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
+ if builder.GetEditorUser() == "" {
+ return nil
+ }
+ query.Creator = NewFilter(FieldEditorUser, builder.GetEditorUser(), OperationEquals)
+ return query.Creator
+}
+
+func instanceIDFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
+ if builder.GetInstanceID() == nil {
+ return nil
+ }
+ query.InstanceID = NewFilter(FieldInstanceID, *builder.GetInstanceID(), OperationEquals)
+ return query.InstanceID
+}
+
+func positionAfterFilter(builder *eventstore.SearchQueryBuilder, query *SearchQuery) *Filter {
+ if builder.GetPositionAfter() == 0 {
+ return nil
+ }
+ query.Position = NewFilter(FieldPosition, builder.GetPositionAfter(), OperationGreater)
+ return query.Position
+}
+
+func aggregateIDFilter(query *eventstore.SearchQuery) *Filter {
+ if len(query.GetAggregateIDs()) < 1 {
+ return nil
+ }
+ if len(query.GetAggregateIDs()) == 1 {
+ return NewFilter(FieldAggregateID, query.GetAggregateIDs()[0], OperationEquals)
+ }
+ return NewFilter(FieldAggregateID, database.TextArray[string](query.GetAggregateIDs()), OperationIn)
+}
+
+func eventTypeFilter(query *eventstore.SearchQuery) *Filter {
+ if len(query.GetEventTypes()) < 1 {
+ return nil
+ }
+ if len(query.GetEventTypes()) == 1 {
+ return NewFilter(FieldEventType, query.GetEventTypes()[0], OperationEquals)
+ }
+ eventTypes := make(database.TextArray[eventstore.EventType], len(query.GetEventTypes()))
+ for i, eventType := range query.GetEventTypes() {
+ eventTypes[i] = eventType
+ }
+ return NewFilter(FieldEventType, eventTypes, OperationIn)
+}
+
+func aggregateTypeFilter(query *eventstore.SearchQuery) *Filter {
+ if len(query.GetAggregateTypes()) < 1 {
+ return nil
+ }
+ if len(query.GetAggregateTypes()) == 1 {
+ return NewFilter(FieldAggregateType, query.GetAggregateTypes()[0], OperationEquals)
+ }
+ aggregateTypes := make(database.TextArray[eventstore.AggregateType], len(query.GetAggregateTypes()))
+ for i, aggregateType := range query.GetAggregateTypes() {
+ aggregateTypes[i] = aggregateType
+ }
+ return NewFilter(FieldAggregateType, aggregateTypes, OperationIn)
+}
+
+func eventDataFilter(query *eventstore.SearchQuery) *Filter {
+ if len(query.GetEventData()) == 0 {
+ return nil
+ }
+ return NewFilter(FieldEventData, query.GetEventData(), OperationJSONContains)
+}
diff --git a/internal/eventstore/repository/search_query_test.go b/internal/eventstore/repository/search_query_test.go
index d72235b346..a830155e30 100644
--- a/internal/eventstore/repository/search_query_test.go
+++ b/internal/eventstore/repository/search_query_test.go
@@ -3,6 +3,8 @@ package repository
import (
"reflect"
"testing"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
func TestNewFilter(t *testing.T) {
@@ -105,7 +107,7 @@ func TestFilter_Validate(t *testing.T) {
func TestColumns_Validate(t *testing.T) {
type fields struct {
- columns Columns
+ columns eventstore.Columns
}
tests := []struct {
name string
@@ -115,7 +117,7 @@ func TestColumns_Validate(t *testing.T) {
{
name: "correct filter",
fields: fields{
- columns: ColumnsEvent,
+ columns: eventstore.ColumnsEvent,
},
wantErr: false,
},
@@ -129,7 +131,7 @@ func TestColumns_Validate(t *testing.T) {
{
name: "columns too high",
fields: fields{
- columns: columnsCount,
+ columns: 100,
},
wantErr: true,
},
diff --git a/internal/eventstore/repository/sql/crdb.go b/internal/eventstore/repository/sql/crdb.go
index 14fab23b61..6d0cda612c 100644
--- a/internal/eventstore/repository/sql/crdb.go
+++ b/internal/eventstore/repository/sql/crdb.go
@@ -3,6 +3,7 @@ package sql
import (
"context"
"database/sql"
+ "encoding/json"
"errors"
"regexp"
"strconv"
@@ -13,8 +14,10 @@ import (
"github.com/lib/pq"
"github.com/zitadel/logging"
+ "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
)
@@ -52,6 +55,7 @@ const (
" aggregate_id," +
" aggregate_version," +
" creation_date," +
+ " position," +
" event_data," +
" editor_user," +
" editor_service," +
@@ -59,7 +63,8 @@ const (
" instance_id," +
" event_sequence," +
" previous_aggregate_sequence," +
- " previous_aggregate_type_sequence" +
+ " previous_aggregate_type_sequence," +
+ " in_tx_order" +
") " +
// defines the data to be inserted
"SELECT" +
@@ -67,17 +72,19 @@ const (
" $2::VARCHAR AS aggregate_type," +
" $3::VARCHAR AS aggregate_id," +
" $4::VARCHAR AS aggregate_version," +
- " statement_timestamp() AS creation_date," +
+ " hlc_to_timestamp(cluster_logical_timestamp()) AS creation_date," +
+ " cluster_logical_timestamp() AS position," +
" $5::JSONB AS event_data," +
" $6::VARCHAR AS editor_user," +
" $7::VARCHAR AS editor_service," +
" COALESCE((resource_owner), $8::VARCHAR) AS resource_owner," +
" $9::VARCHAR AS instance_id," +
- " NEXTVAL(CONCAT('eventstore.', (CASE WHEN $9 <> '' THEN CONCAT('i_', $9) ELSE 'system' END), '_seq'))," +
+ " COALESCE(aggregate_sequence, 0)+1," +
" aggregate_sequence AS previous_aggregate_sequence," +
- " aggregate_type_sequence AS previous_aggregate_type_sequence " +
+ " aggregate_type_sequence AS previous_aggregate_type_sequence," +
+ " $10 AS in_tx_order " +
"FROM previous_data " +
- "RETURNING id, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, creation_date, resource_owner, instance_id"
+ "RETURNING id, event_sequence, creation_date, resource_owner, instance_id"
uniqueInsert = `INSERT INTO eventstore.unique_constraints
(
@@ -97,93 +104,109 @@ const (
WHERE instance_id = $1`
)
-type CRDB struct {
- *database.DB
- AllowOrderByCreationDate bool
+// awaitOpenTransactions ensures event ordering, so we don't events younger that open transactions
+var (
+ awaitOpenTransactionsV1 string
+ awaitOpenTransactionsV2 string
+)
+
+func awaitOpenTransactions(useV1 bool) string {
+ if useV1 {
+ return awaitOpenTransactionsV1
+ }
+ return awaitOpenTransactionsV2
}
-func NewCRDB(client *database.DB, allowOrderByCreationDate bool) *CRDB {
- return &CRDB{client, allowOrderByCreationDate}
+type CRDB struct {
+ *database.DB
+}
+
+func NewCRDB(client *database.DB) *CRDB {
+ switch client.Type() {
+ case "cockroach":
+ awaitOpenTransactionsV1 = " AND creation_date::TIMESTAMP < (SELECT COALESCE(MIN(start), NOW())::TIMESTAMP FROM crdb_internal.cluster_transactions where application_name = '" + database.EventstorePusherAppName + "')"
+ awaitOpenTransactionsV2 = ` AND hlc_to_timestamp("position") < (SELECT COALESCE(MIN(start), NOW())::TIMESTAMP FROM crdb_internal.cluster_transactions where application_name = '` + database.EventstorePusherAppName + `')`
+ case "postgres":
+ awaitOpenTransactionsV1 = ` AND EXTRACT(EPOCH FROM created_at) < (SELECT COALESCE(EXTRACT(EPOCH FROM min(xact_start)), EXTRACT(EPOCH FROM now())) FROM pg_stat_activity WHERE datname = current_database() AND application_name = '` + database.EventstorePusherAppName + `' AND state <> 'idle')`
+ awaitOpenTransactionsV2 = ` AND "position" < (SELECT COALESCE(EXTRACT(EPOCH FROM min(xact_start)), EXTRACT(EPOCH FROM now())) FROM pg_stat_activity WHERE datname = current_database() AND application_name = '` + database.EventstorePusherAppName + `' AND state <> 'idle')`
+ }
+
+ return &CRDB{client}
}
func (db *CRDB) Health(ctx context.Context) error { return db.Ping() }
// Push adds all events to the eventstreams of the aggregates.
// This call is transaction save. The transaction will be rolled back if one event fails
-func (db *CRDB) Push(ctx context.Context, events []*repository.Event, uniqueConstraints ...*repository.UniqueConstraint) error {
- err := crdb.ExecuteTx(ctx, db.DB.DB, nil, func(tx *sql.Tx) error {
+func (db *CRDB) Push(ctx context.Context, commands ...eventstore.Command) (events []eventstore.Event, err error) {
+ events = make([]eventstore.Event, len(commands))
+
+ err = crdb.ExecuteTx(ctx, db.DB.DB, nil, func(tx *sql.Tx) error {
+
+ var uniqueConstraints []*eventstore.UniqueConstraint
+
+ for i, command := range commands {
+ if command.Aggregate().InstanceID == "" {
+ command.Aggregate().InstanceID = authz.GetInstance(ctx).InstanceID()
+ }
+
+ var payload []byte
+ if command.Payload() != nil {
+ payload, err = json.Marshal(command.Payload())
+ if err != nil {
+ return err
+ }
+ }
+ e := &repository.Event{
+ Typ: command.Type(),
+ Data: payload,
+ EditorUser: command.Creator(),
+ Version: command.Aggregate().Version,
+ AggregateID: command.Aggregate().ID,
+ AggregateType: command.Aggregate().Type,
+ ResourceOwner: sql.NullString{String: command.Aggregate().ResourceOwner, Valid: command.Aggregate().ResourceOwner != ""},
+ InstanceID: command.Aggregate().InstanceID,
+ }
- var (
- previousAggregateSequence Sequence
- previousAggregateTypeSequence Sequence
- )
- for _, event := range events {
err := tx.QueryRowContext(ctx, crdbInsert,
- event.Type,
- event.AggregateType,
- event.AggregateID,
- event.Version,
- Data(event.Data),
- event.EditorUser,
- event.EditorService,
- event.ResourceOwner,
- event.InstanceID,
- ).Scan(&event.ID, &event.Sequence, &previousAggregateSequence, &previousAggregateTypeSequence, &event.CreationDate, &event.ResourceOwner, &event.InstanceID)
-
- event.PreviousAggregateSequence = uint64(previousAggregateSequence)
- event.PreviousAggregateTypeSequence = uint64(previousAggregateTypeSequence)
+ e.Type(),
+ e.Aggregate().Type,
+ e.Aggregate().ID,
+ e.Aggregate().Version,
+ payload,
+ e.Creator(),
+ "zitadel",
+ e.Aggregate().ResourceOwner,
+ e.Aggregate().InstanceID,
+ i,
+ ).Scan(&e.ID, &e.Seq, &e.CreationDate, &e.ResourceOwner, &e.InstanceID)
if err != nil {
logging.WithFields(
- "aggregate", event.AggregateType,
- "aggregateId", event.AggregateID,
- "aggregateType", event.AggregateType,
- "eventType", event.Type,
- "instanceID", event.InstanceID,
+ "aggregate", e.Aggregate().Type,
+ "aggregateId", e.Aggregate().ID,
+ "aggregateType", e.Aggregate().Type,
+ "eventType", e.Type(),
+ "instanceID", e.Aggregate().InstanceID,
).WithError(err).Debug("query failed")
return caos_errs.ThrowInternal(err, "SQL-SBP37", "unable to create event")
}
+
+ uniqueConstraints = append(uniqueConstraints, command.UniqueConstraints()...)
+ events[i] = e
}
- err := db.handleUniqueConstraints(ctx, tx, uniqueConstraints...)
- if err != nil {
- return err
- }
- return nil
+ return db.handleUniqueConstraints(ctx, tx, uniqueConstraints...)
})
if err != nil && !errors.Is(err, &caos_errs.CaosError{}) {
err = caos_errs.ThrowInternal(err, "SQL-DjgtG", "unable to store events")
}
- return err
-}
-
-var instanceRegexp = regexp.MustCompile(`eventstore\.i_[0-9a-zA-Z]{1,}_seq`)
-
-func (db *CRDB) CreateInstance(ctx context.Context, instanceID string) error {
- var sequenceName string
- err := db.QueryRowContext(ctx,
- func(row *sql.Row) error {
- if err := row.Scan(&sequenceName); err != nil || !instanceRegexp.MatchString(sequenceName) {
- return caos_errs.ThrowInvalidArgument(err, "SQL-7gtFA", "Errors.InvalidArgument")
- }
- return nil
- },
- "SELECT CONCAT('eventstore.i_', $1::TEXT, '_seq')", instanceID,
- )
- if err != nil {
- return err
- }
-
- if _, err := db.ExecContext(ctx, "CREATE SEQUENCE "+sequenceName); err != nil {
- return caos_errs.ThrowInternal(err, "SQL-7gtFA", "Errors.Internal")
- }
-
- return nil
+ return events, err
}
// handleUniqueConstraints adds or removes unique constraints
-func (db *CRDB) handleUniqueConstraints(ctx context.Context, tx *sql.Tx, uniqueConstraints ...*repository.UniqueConstraint) (err error) {
+func (db *CRDB) handleUniqueConstraints(ctx context.Context, tx *sql.Tx, uniqueConstraints ...*eventstore.UniqueConstraint) (err error) {
if len(uniqueConstraints) == 0 || (len(uniqueConstraints) == 1 && uniqueConstraints[0] == nil) {
return nil
}
@@ -191,32 +214,32 @@ func (db *CRDB) handleUniqueConstraints(ctx context.Context, tx *sql.Tx, uniqueC
for _, uniqueConstraint := range uniqueConstraints {
uniqueConstraint.UniqueField = strings.ToLower(uniqueConstraint.UniqueField)
switch uniqueConstraint.Action {
- case repository.UniqueConstraintAdd:
- _, err := tx.ExecContext(ctx, uniqueInsert, uniqueConstraint.UniqueType, uniqueConstraint.UniqueField, uniqueConstraint.InstanceID)
+ case eventstore.UniqueConstraintAdd:
+ _, err := tx.ExecContext(ctx, uniqueInsert, uniqueConstraint.UniqueType, uniqueConstraint.UniqueField, authz.GetInstance(ctx).InstanceID())
if err != nil {
logging.WithFields(
"unique_type", uniqueConstraint.UniqueType,
"unique_field", uniqueConstraint.UniqueField).WithError(err).Info("insert unique constraint failed")
if db.isUniqueViolationError(err) {
- return caos_errs.ThrowAlreadyExists(err, "SQL-M0dsf", uniqueConstraint.ErrorMessage)
+ return caos_errs.ThrowAlreadyExists(err, "SQL-wHcEq", uniqueConstraint.ErrorMessage)
}
return caos_errs.ThrowInternal(err, "SQL-dM9ds", "unable to create unique constraint")
}
- case repository.UniqueConstraintRemoved:
- _, err := tx.ExecContext(ctx, uniqueDelete, uniqueConstraint.UniqueType, uniqueConstraint.UniqueField, uniqueConstraint.InstanceID)
+ case eventstore.UniqueConstraintRemove:
+ _, err := tx.ExecContext(ctx, uniqueDelete, uniqueConstraint.UniqueType, uniqueConstraint.UniqueField, authz.GetInstance(ctx).InstanceID())
if err != nil {
logging.WithFields(
"unique_type", uniqueConstraint.UniqueType,
"unique_field", uniqueConstraint.UniqueField).WithError(err).Info("delete unique constraint failed")
return caos_errs.ThrowInternal(err, "SQL-6n88i", "unable to remove unique constraint")
}
- case repository.UniqueConstraintInstanceRemoved:
- _, err := tx.ExecContext(ctx, uniqueDeleteInstance, uniqueConstraint.InstanceID)
+ case eventstore.UniqueConstraintInstanceRemove:
+ _, err := tx.ExecContext(ctx, uniqueDeleteInstance, authz.GetInstance(ctx).InstanceID())
if err != nil {
logging.WithFields(
- "instance_id", uniqueConstraint.InstanceID).WithError(err).Info("delete instance unique constraints failed")
+ "instance_id", authz.GetInstance(ctx).InstanceID()).WithError(err).Info("delete instance unique constraints failed")
return caos_errs.ThrowInternal(err, "SQL-6n88i", "unable to remove unique constraints of instance")
}
}
@@ -225,9 +248,16 @@ func (db *CRDB) handleUniqueConstraints(ctx context.Context, tx *sql.Tx, uniqueC
}
// Filter returns all events matching the given search query
-func (crdb *CRDB) Filter(ctx context.Context, searchQuery *repository.SearchQuery) (events []*repository.Event, err error) {
- events = []*repository.Event{}
- err = query(ctx, crdb, searchQuery, &events)
+func (crdb *CRDB) Filter(ctx context.Context, searchQuery *eventstore.SearchQueryBuilder) (events []eventstore.Event, err error) {
+ events = make([]eventstore.Event, 0, searchQuery.GetLimit())
+ err = query(ctx, crdb, searchQuery, &events, false)
+ pgErr := new(pgconn.PgError)
+ // check events2 not exists
+ if err != nil && errors.As(err, &pgErr) {
+ if pgErr.Code == "42P01" {
+ err = query(ctx, crdb, searchQuery, &events, true)
+ }
+ }
if err != nil {
return nil, err
}
@@ -236,19 +266,16 @@ func (crdb *CRDB) Filter(ctx context.Context, searchQuery *repository.SearchQuer
}
// LatestSequence returns the latest sequence found by the search query
-func (db *CRDB) LatestSequence(ctx context.Context, searchQuery *repository.SearchQuery) (uint64, error) {
- var seq Sequence
- err := query(ctx, db, searchQuery, &seq)
- if err != nil {
- return 0, err
- }
- return uint64(seq), nil
+func (db *CRDB) LatestSequence(ctx context.Context, searchQuery *eventstore.SearchQueryBuilder) (float64, error) {
+ var position sql.NullFloat64
+ err := query(ctx, db, searchQuery, &position, false)
+ return position.Float64, err
}
// InstanceIDs returns the instance ids found by the search query
-func (db *CRDB) InstanceIDs(ctx context.Context, searchQuery *repository.SearchQuery) ([]string, error) {
+func (db *CRDB) InstanceIDs(ctx context.Context, searchQuery *eventstore.SearchQueryBuilder) ([]string, error) {
var ids []string
- err := query(ctx, db, searchQuery, &ids)
+ err := query(ctx, db, searchQuery, &ids, false)
if err != nil {
return nil, err
}
@@ -259,70 +286,107 @@ func (db *CRDB) db() *database.DB {
return db.DB
}
-func (db *CRDB) orderByEventSequence(desc bool) string {
- if db.AllowOrderByCreationDate {
+func (db *CRDB) orderByEventSequence(desc, useV1 bool) string {
+ if useV1 {
if desc {
- return " ORDER BY creation_date DESC, event_sequence DESC"
+ return ` ORDER BY event_sequence DESC`
}
-
- return " ORDER BY creation_date, event_sequence"
+ return ` ORDER BY event_sequence`
}
-
if desc {
- return " ORDER BY event_sequence DESC"
+ return ` ORDER BY "position" DESC, in_tx_order DESC`
}
- return " ORDER BY event_sequence"
+ return ` ORDER BY "position", in_tx_order`
}
-func (db *CRDB) eventQuery() string {
+func (db *CRDB) eventQuery(useV1 bool) string {
+ if useV1 {
+ return "SELECT" +
+ " creation_date" +
+ ", event_type" +
+ ", event_sequence" +
+ ", event_data" +
+ ", editor_user" +
+ ", resource_owner" +
+ ", instance_id" +
+ ", aggregate_type" +
+ ", aggregate_id" +
+ ", aggregate_version" +
+ " FROM eventstore.events"
+ }
return "SELECT" +
- " creation_date" +
+ " created_at" +
", event_type" +
- ", event_sequence" +
- ", previous_aggregate_sequence" +
- ", previous_aggregate_type_sequence" +
- ", event_data" +
- ", editor_service" +
- ", editor_user" +
- ", resource_owner" +
+ `, "sequence"` +
+ `, "position"` +
+ ", payload" +
+ ", creator" +
+ `, "owner"` +
", instance_id" +
", aggregate_type" +
", aggregate_id" +
- ", aggregate_version" +
- " FROM eventstore.events"
+ ", revision" +
+ " FROM eventstore.events2"
}
-func (db *CRDB) maxSequenceQuery() string {
- return "SELECT MAX(event_sequence) FROM eventstore.events"
+func (db *CRDB) maxSequenceQuery(useV1 bool) string {
+ if useV1 {
+ return `SELECT event_sequence FROM eventstore.events`
+ }
+ return `SELECT "position" FROM eventstore.events2`
}
-func (db *CRDB) instanceIDsQuery() string {
- return "SELECT DISTINCT instance_id FROM eventstore.events"
+func (db *CRDB) instanceIDsQuery(useV1 bool) string {
+ table := "eventstore.events2"
+ if useV1 {
+ table = "eventstore.events"
+ }
+ return "SELECT DISTINCT instance_id FROM " + table
}
-func (db *CRDB) columnName(col repository.Field) string {
+func (db *CRDB) columnName(col repository.Field, useV1 bool) string {
switch col {
case repository.FieldAggregateID:
return "aggregate_id"
case repository.FieldAggregateType:
return "aggregate_type"
case repository.FieldSequence:
- return "event_sequence"
+ if useV1 {
+ return "event_sequence"
+ }
+ return `"sequence"`
case repository.FieldResourceOwner:
- return "resource_owner"
+ if useV1 {
+ return "resource_owner"
+ }
+ return `"owner"`
case repository.FieldInstanceID:
return "instance_id"
case repository.FieldEditorService:
- return "editor_service"
+ if useV1 {
+ return "editor_service"
+ }
+ return ""
case repository.FieldEditorUser:
- return "editor_user"
+ if useV1 {
+ return "editor_user"
+ }
+ return "creator"
case repository.FieldEventType:
return "event_type"
case repository.FieldEventData:
- return "event_data"
+ if useV1 {
+ return "event_data"
+ }
+ return "payload"
case repository.FieldCreationDate:
- return "creation_date"
+ if useV1 {
+ return "creation_date"
+ }
+ return "created_at"
+ case repository.FieldPosition:
+ return `"position"`
default:
return ""
}
diff --git a/internal/eventstore/repository/sql/crdb_test.go b/internal/eventstore/repository/sql/crdb_test.go
index 0d8b0ca32f..a3f3331a82 100644
--- a/internal/eventstore/repository/sql/crdb_test.go
+++ b/internal/eventstore/repository/sql/crdb_test.go
@@ -1,12 +1,10 @@
package sql
import (
- "context"
"database/sql"
- "sync"
"testing"
- "github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
)
@@ -25,28 +23,28 @@ func TestCRDB_placeholder(t *testing.T) {
{
name: "no placeholders",
args: args{
- query: "SELECT * FROM eventstore.events",
+ query: "SELECT * FROM eventstore.events2",
},
res: res{
- query: "SELECT * FROM eventstore.events",
+ query: "SELECT * FROM eventstore.events2",
},
},
{
name: "one placeholder",
args: args{
- query: "SELECT * FROM eventstore.events WHERE aggregate_type = ?",
+ query: "SELECT * FROM eventstore.events2 WHERE aggregate_type = ?",
},
res: res{
- query: "SELECT * FROM eventstore.events WHERE aggregate_type = $1",
+ query: "SELECT * FROM eventstore.events2 WHERE aggregate_type = $1",
},
},
{
name: "multiple placeholders",
args: args{
- query: "SELECT * FROM eventstore.events WHERE aggregate_type = ? AND aggregate_id = ? LIMIT ?",
+ query: "SELECT * FROM eventstore.events2 WHERE aggregate_type = ? AND aggregate_id = ? LIMIT ?",
},
res: res{
- query: "SELECT * FROM eventstore.events WHERE aggregate_type = $1 AND aggregate_id = $2 LIMIT $3",
+ query: "SELECT * FROM eventstore.events2 WHERE aggregate_type = $1 AND aggregate_id = $2 LIMIT $3",
},
},
}
@@ -175,6 +173,7 @@ func TestCRDB_columnName(t *testing.T) {
}
type args struct {
field repository.Field
+ useV1 bool
}
tests := []struct {
name string
@@ -212,18 +211,38 @@ func TestCRDB_columnName(t *testing.T) {
name: "editor service",
args: args{
field: repository.FieldEditorService,
+ useV1: true,
},
res: res{
name: "editor_service",
},
},
+ {
+ name: "editor service v2",
+ args: args{
+ field: repository.FieldEditorService,
+ },
+ res: res{
+ name: "",
+ },
+ },
{
name: "editor user",
+ args: args{
+ field: repository.FieldEditorUser,
+ useV1: true,
+ },
+ res: res{
+ name: "editor_user",
+ },
+ },
+ {
+ name: "editor user v2",
args: args{
field: repository.FieldEditorUser,
},
res: res{
- name: "editor_user",
+ name: "creator",
},
},
{
@@ -239,976 +258,61 @@ func TestCRDB_columnName(t *testing.T) {
name: "latest sequence",
args: args{
field: repository.FieldSequence,
+ useV1: true,
},
res: res{
name: "event_sequence",
},
},
+ {
+ name: "latest sequence v2",
+ args: args{
+ field: repository.FieldSequence,
+ },
+ res: res{
+ name: `"sequence"`,
+ },
+ },
{
name: "resource owner",
+ args: args{
+ field: repository.FieldResourceOwner,
+ useV1: true,
+ },
+ res: res{
+ name: "resource_owner",
+ },
+ },
+ {
+ name: "resource owner v2",
args: args{
field: repository.FieldResourceOwner,
},
res: res{
- name: "resource_owner",
+ name: `"owner"`,
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
db := &CRDB{}
- if got := db.columnName(tt.args.field); got != tt.res.name {
+ if got := db.columnName(tt.args.field, tt.args.useV1); got != tt.res.name {
t.Errorf("CRDB.operation() = %v, want %v", got, tt.res.name)
}
})
}
}
-func TestCRDB_Push_OneAggregate(t *testing.T) {
- type args struct {
- ctx context.Context
- events []*repository.Event
- uniqueConstraints *repository.UniqueConstraint
- uniqueDataType string
- uniqueDataField string
- uniqueDataInstanceID string
- }
- type eventsRes struct {
- pushedEventsCount int
- uniqueCount int
- assetCount int
- aggType repository.AggregateType
- aggID database.StringArray
- }
- type res struct {
- wantErr bool
- eventsRes eventsRes
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "push 1 event",
- args: args{
- ctx: context.Background(),
- events: []*repository.Event{
- generateEvent(t, "1"),
- },
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 1,
- aggID: []string{"1"},
- aggType: repository.AggregateType(t.Name()),
- }},
- },
- {
- name: "push two events on agg",
- args: args{
- ctx: context.Background(),
- events: []*repository.Event{
- generateEvent(t, "6"),
- generateEvent(t, "6"),
- },
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 2,
- aggID: []string{"6"},
- aggType: repository.AggregateType(t.Name()),
- },
- },
- },
- {
- name: "failed push because context canceled",
- args: args{
- ctx: canceledCtx(),
- events: []*repository.Event{
- generateEvent(t, "9"),
- },
- },
- res: res{
- wantErr: true,
- eventsRes: eventsRes{
- pushedEventsCount: 0,
- aggID: []string{"9"},
- aggType: repository.AggregateType(t.Name()),
- },
- },
- },
- {
- name: "push 1 event and add unique constraint",
- args: args{
- ctx: context.Background(),
- events: []*repository.Event{
- generateEvent(t, "10"),
- },
- uniqueConstraints: generateAddUniqueConstraint(t, "usernames", "field"),
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 1,
- uniqueCount: 1,
- aggID: []string{"10"},
- aggType: repository.AggregateType(t.Name()),
- }},
- },
- {
- name: "push 1 event and remove unique constraint",
- args: args{
- ctx: context.Background(),
- events: []*repository.Event{
- generateEvent(t, "11"),
- },
- uniqueConstraints: generateRemoveUniqueConstraint(t, "usernames", "testremove"),
- uniqueDataType: "usernames",
- uniqueDataField: "testremove",
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 1,
- uniqueCount: 0,
- aggID: []string{"11"},
- aggType: repository.AggregateType(t.Name()),
- }},
- },
- {
- name: "push 1 event and remove instance unique constraints",
- args: args{
- ctx: context.Background(),
- events: []*repository.Event{
- generateEvent(t, "12"),
- },
- uniqueConstraints: generateRemoveInstanceUniqueConstraints(t, "instanceID"),
- uniqueDataType: "usernames",
- uniqueDataField: "testremove",
- uniqueDataInstanceID: "instanceID",
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 1,
- uniqueCount: 0,
- aggID: []string{"12"},
- aggType: repository.AggregateType(t.Name()),
- }},
- },
- {
- name: "push 1 event and add asset",
- args: args{
- ctx: context.Background(),
- events: []*repository.Event{
- generateEvent(t, "13"),
- },
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 1,
- assetCount: 1,
- aggID: []string{"13"},
- aggType: repository.AggregateType(t.Name()),
- }},
- },
- {
- name: "push 1 event and remove asset",
- args: args{
- ctx: context.Background(),
- events: []*repository.Event{
- generateEvent(t, "14"),
- },
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 1,
- assetCount: 0,
- aggID: []string{"14"},
- aggType: repository.AggregateType(t.Name()),
- }},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- db := &CRDB{
- DB: &database.DB{
- DB: testCRDBClient,
- Database: new(testDB),
- },
- }
- if tt.args.uniqueDataType != "" && tt.args.uniqueDataField != "" {
- err := fillUniqueData(tt.args.uniqueDataType, tt.args.uniqueDataField, tt.args.uniqueDataInstanceID)
- if err != nil {
- t.Error("unable to prefill insert unique data: ", err)
- return
- }
- }
- if err := db.Push(tt.args.ctx, tt.args.events, tt.args.uniqueConstraints); (err != nil) != tt.res.wantErr {
- t.Errorf("CRDB.Push() error = %v, wantErr %v", err, tt.res.wantErr)
- }
-
- countEventRow := testCRDBClient.QueryRow("SELECT COUNT(*) FROM eventstore.events where aggregate_type = $1 AND aggregate_id = ANY($2)", tt.res.eventsRes.aggType, tt.res.eventsRes.aggID)
- var eventCount int
- err := countEventRow.Scan(&eventCount)
- if err != nil {
- t.Error("unable to query inserted rows: ", err)
- return
- }
- if eventCount != tt.res.eventsRes.pushedEventsCount {
- t.Errorf("expected push count %d got %d", tt.res.eventsRes.pushedEventsCount, eventCount)
- }
- if tt.args.uniqueConstraints != nil {
- countUniqueRow := testCRDBClient.QueryRow("SELECT COUNT(*) FROM eventstore.unique_constraints where unique_type = $1 AND unique_field = $2 AND instance_id = $3", tt.args.uniqueConstraints.UniqueType, tt.args.uniqueConstraints.UniqueField, tt.args.uniqueConstraints.InstanceID)
- var uniqueCount int
- err := countUniqueRow.Scan(&uniqueCount)
- if err != nil {
- t.Error("unable to query inserted rows: ", err)
- return
- }
- if uniqueCount != tt.res.eventsRes.uniqueCount {
- t.Errorf("expected unique count %d got %d", tt.res.eventsRes.uniqueCount, uniqueCount)
- }
- }
- })
- }
-}
-
-func TestCRDB_Push_MultipleAggregate(t *testing.T) {
- type args struct {
- events []*repository.Event
- }
- type eventsRes struct {
- pushedEventsCount int
- aggType database.StringArray
- aggID database.StringArray
- }
- type res struct {
- wantErr bool
- eventsRes eventsRes
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "push two aggregates",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "100"),
- generateEvent(t, "101"),
- },
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 2,
- aggID: []string{"100", "101"},
- aggType: database.StringArray{t.Name()},
- },
- },
- },
- {
- name: "push two aggregates both multiple events",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "102"),
- generateEvent(t, "102"),
- generateEvent(t, "103"),
- generateEvent(t, "103"),
- },
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 4,
- aggID: []string{"102", "103"},
- aggType: database.StringArray{t.Name()},
- },
- },
- },
- {
- name: "push two aggregates mixed multiple events",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "106"),
- generateEvent(t, "106"),
- generateEvent(t, "106"),
- generateEvent(t, "106"),
- generateEvent(t, "107"),
- generateEvent(t, "107"),
- generateEvent(t, "107"),
- generateEvent(t, "107"),
- generateEvent(t, "108"),
- generateEvent(t, "108"),
- generateEvent(t, "108"),
- generateEvent(t, "108"),
- },
- },
- res: res{
- wantErr: false,
- eventsRes: eventsRes{
- pushedEventsCount: 12,
- aggID: []string{"106", "107", "108"},
- aggType: database.StringArray{t.Name()},
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- db := &CRDB{
- DB: &database.DB{
- DB: testCRDBClient,
- Database: new(testDB),
- },
- }
- if err := db.Push(context.Background(), tt.args.events); (err != nil) != tt.res.wantErr {
- t.Errorf("CRDB.Push() error = %v, wantErr %v", err, tt.res.wantErr)
- }
-
- countRow := testCRDBClient.QueryRow("SELECT COUNT(*) FROM eventstore.events where aggregate_type = ANY($1) AND aggregate_id = ANY($2)", tt.res.eventsRes.aggType, tt.res.eventsRes.aggID)
- var count int
- err := countRow.Scan(&count)
- if err != nil {
- t.Error("unable to query inserted rows: ", err)
- return
- }
- if count != tt.res.eventsRes.pushedEventsCount {
- t.Errorf("expected push count %d got %d", tt.res.eventsRes.pushedEventsCount, count)
- }
- })
- }
-}
-
-func TestCRDB_CreateInstance(t *testing.T) {
- type args struct {
- instanceID string
- }
- type res struct {
- wantErr bool
- exists bool
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "no number",
- args: args{
- instanceID: "asdf;use defaultdb;DROP DATABASE zitadel;--",
- },
- res: res{
- wantErr: true,
- exists: false,
- },
- },
- {
- name: "no instance id",
- args: args{
- instanceID: "",
- },
- res: res{
- wantErr: true,
- exists: false,
- },
- },
- {
- name: "correct number",
- args: args{
- instanceID: "1235",
- },
- res: res{
- wantErr: false,
- exists: true,
- },
- },
- {
- name: "correct text",
- args: args{
- instanceID: "system",
- },
- res: res{
- wantErr: false,
- exists: true,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- db := &CRDB{
- DB: &database.DB{DB: testCRDBClient},
- }
-
- if err := db.CreateInstance(context.Background(), tt.args.instanceID); (err != nil) != tt.res.wantErr {
- t.Errorf("CRDB.CreateInstance() error = %v, wantErr %v", err, tt.res.wantErr)
- }
-
- sequenceRow := testCRDBClient.QueryRow("SELECT EXISTS(SELECT 1 FROM [SHOW SEQUENCES] WHERE sequence_schema = 'eventstore' AND sequence_name like $1)", "i_"+tt.args.instanceID+"%")
- var exists bool
- err := sequenceRow.Scan(&exists)
- if err != nil {
- t.Error("unable to query inserted rows: ", err)
- return
- }
- if exists != tt.res.exists {
- t.Errorf("expected exists %v got %v", tt.res.exists, exists)
- }
- })
- }
-}
-
-func TestCRDB_Push_Parallel(t *testing.T) {
- type args struct {
- events [][]*repository.Event
- }
- type eventsRes struct {
- pushedEventsCount int
- aggTypes database.StringArray
- aggIDs database.StringArray
- }
- type res struct {
- errCount int
- eventsRes eventsRes
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "clients push different aggregates",
- args: args{
- events: [][]*repository.Event{
- {
- generateEvent(t, "200"),
- generateEvent(t, "200"),
- generateEvent(t, "200"),
- generateEvent(t, "201"),
- generateEvent(t, "201"),
- generateEvent(t, "201"),
- },
- {
- generateEvent(t, "202"),
- generateEvent(t, "203"),
- generateEvent(t, "203"),
- },
- },
- },
- res: res{
- errCount: 0,
- eventsRes: eventsRes{
- aggIDs: []string{"200", "201", "202", "203"},
- pushedEventsCount: 9,
- aggTypes: database.StringArray{t.Name()},
- },
- },
- },
- {
- name: "clients push same aggregates",
- args: args{
- events: [][]*repository.Event{
- {
- generateEvent(t, "204"),
- generateEvent(t, "204"),
- },
- {
- generateEvent(t, "204"),
- generateEvent(t, "204"),
- },
- {
- generateEvent(t, "205"),
- generateEvent(t, "205"),
- generateEvent(t, "205"),
- generateEvent(t, "206"),
- generateEvent(t, "206"),
- generateEvent(t, "206"),
- },
- {
- generateEvent(t, "204"),
- generateEvent(t, "205"),
- generateEvent(t, "205"),
- generateEvent(t, "206"),
- },
- },
- },
- res: res{
- errCount: 0,
- eventsRes: eventsRes{
- aggIDs: []string{"204", "205", "206"},
- pushedEventsCount: 14,
- aggTypes: database.StringArray{t.Name()},
- },
- },
- },
- {
- name: "clients push different aggregates",
- args: args{
- events: [][]*repository.Event{
- {
- generateEvent(t, "207"),
- generateEvent(t, "207"),
- generateEvent(t, "207"),
- generateEvent(t, "207"),
- generateEvent(t, "207"),
- generateEvent(t, "207"),
- },
- {
- generateEvent(t, "208"),
- generateEvent(t, "208"),
- generateEvent(t, "208"),
- generateEvent(t, "208"),
- generateEvent(t, "208"),
- },
- },
- },
- res: res{
- errCount: 0,
- eventsRes: eventsRes{
- aggIDs: []string{"207", "208"},
- pushedEventsCount: 11,
- aggTypes: database.StringArray{t.Name()},
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- db := &CRDB{
- DB: &database.DB{
- DB: testCRDBClient,
- Database: new(testDB),
- },
- }
- wg := sync.WaitGroup{}
-
- errs := make([]error, 0, tt.res.errCount)
- errsMu := sync.Mutex{}
- for _, events := range tt.args.events {
- wg.Add(1)
- go func(events []*repository.Event) {
- err := db.Push(context.Background(), events, nil)
- if err != nil {
- errsMu.Lock()
- errs = append(errs, err)
- errsMu.Unlock()
- }
-
- wg.Done()
- }(events)
- }
- wg.Wait()
-
- if len(errs) != tt.res.errCount {
- t.Errorf("CRDB.Push() error count = %d, wanted err count %d, errs: %v", len(errs), tt.res.errCount, errs)
- }
-
- rows, err := testCRDBClient.Query("SELECT event_data FROM eventstore.events where aggregate_type = ANY($1) AND aggregate_id = ANY($2) order by event_sequence", tt.res.eventsRes.aggTypes, tt.res.eventsRes.aggIDs)
- if err != nil {
- t.Error("unable to query inserted rows: ", err)
- return
- }
- var count int
-
- for rows.Next() {
- count++
- data := make(Data, 0)
-
- err := rows.Scan(&data)
- if err != nil {
- t.Error("unable to query inserted rows: ", err)
- return
- }
- t.Logf("inserted data: %v", string(data))
- }
- if count != tt.res.eventsRes.pushedEventsCount {
- t.Errorf("expected push count %d got %d", tt.res.eventsRes.pushedEventsCount, count)
- }
- })
- }
-}
-
-func TestCRDB_Filter(t *testing.T) {
- type args struct {
- searchQuery *repository.SearchQuery
- }
- type fields struct {
- existingEvents []*repository.Event
- }
- type res struct {
- eventCount int
- }
- tests := []struct {
- name string
- fields fields
- args args
- res res
- wantErr bool
- }{
- {
- name: "aggregate type filter no events",
- args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, "not found", repository.OperationEquals),
- },
- },
- },
- },
- fields: fields{
- existingEvents: []*repository.Event{
- generateEvent(t, "300"),
- generateEvent(t, "300"),
- generateEvent(t, "300"),
- },
- },
- res: res{
- eventCount: 0,
- },
- wantErr: false,
- },
- {
- name: "aggregate type and id filter events found",
- args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, t.Name(), repository.OperationEquals),
- repository.NewFilter(repository.FieldAggregateID, "303", repository.OperationEquals),
- },
- },
- },
- },
- fields: fields{
- existingEvents: []*repository.Event{
- generateEvent(t, "303"),
- generateEvent(t, "303"),
- generateEvent(t, "303"),
- generateEvent(t, "305"),
- },
- },
- res: res{
- eventCount: 3,
- },
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- db := &CRDB{
- DB: &database.DB{
- DB: testCRDBClient,
- Database: new(testDB),
- },
- }
-
- // setup initial data for query
- if err := db.Push(context.Background(), tt.fields.existingEvents); err != nil {
- t.Errorf("error in setup = %v", err)
- return
- }
-
- events, err := db.Filter(context.Background(), tt.args.searchQuery)
- if (err != nil) != tt.wantErr {
- t.Errorf("CRDB.query() error = %v, wantErr %v", err, tt.wantErr)
- }
-
- if len(events) != tt.res.eventCount {
- t.Errorf("CRDB.query() expected event count: %d got %d", tt.res.eventCount, len(events))
- }
- })
- }
-}
-
-func TestCRDB_LatestSequence(t *testing.T) {
- type args struct {
- searchQuery *repository.SearchQuery
- }
- type fields struct {
- existingEvents []*repository.Event
- }
- type res struct {
- sequence uint64
- }
- tests := []struct {
- name string
- fields fields
- args args
- res res
- wantErr bool
- }{
- {
- name: "aggregate type filter no sequence",
- args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsMaxSequence,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, "not found", repository.OperationEquals),
- },
- },
- },
- },
- fields: fields{
- existingEvents: []*repository.Event{
- generateEvent(t, "400"),
- generateEvent(t, "400"),
- generateEvent(t, "400"),
- },
- },
- res: res{
- sequence: 0,
- },
- wantErr: false,
- },
- {
- name: "aggregate type filter sequence",
- args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsMaxSequence,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, t.Name(), repository.OperationEquals),
- },
- },
- },
- },
- fields: fields{
- existingEvents: []*repository.Event{
- generateEvent(t, "401"),
- generateEvent(t, "401"),
- generateEvent(t, "401"),
- },
- },
- res: res{
- sequence: 3,
- },
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- db := &CRDB{
- DB: &database.DB{
- DB: testCRDBClient,
- Database: new(testDB),
- },
- }
-
- // setup initial data for query
- if err := db.Push(context.Background(), tt.fields.existingEvents); err != nil {
- t.Errorf("error in setup = %v", err)
- return
- }
-
- sequence, err := db.LatestSequence(context.Background(), tt.args.searchQuery)
- if (err != nil) != tt.wantErr {
- t.Errorf("CRDB.query() error = %v, wantErr %v", err, tt.wantErr)
- }
-
- if sequence < tt.res.sequence {
- t.Errorf("CRDB.query() expected sequence: %d got %d", tt.res.sequence, sequence)
- }
- })
- }
-}
-
-func TestCRDB_Push_ResourceOwner(t *testing.T) {
- type args struct {
- events []*repository.Event
- }
- type res struct {
- resourceOwners database.StringArray
- }
- type fields struct {
- aggregateIDs database.StringArray
- aggregateType string
- }
- tests := []struct {
- name string
- args args
- res res
- fields fields
- }{
- {
- name: "two events of same aggregate same resource owner",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "500", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- generateEvent(t, "500", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- },
- },
- fields: fields{
- aggregateIDs: []string{"500"},
- aggregateType: t.Name(),
- },
- res: res{
- resourceOwners: []string{"caos", "caos"},
- },
- },
- {
- name: "two events of different aggregate same resource owner",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "501", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- generateEvent(t, "502", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- },
- },
- fields: fields{
- aggregateIDs: []string{"501", "502"},
- aggregateType: t.Name(),
- },
- res: res{
- resourceOwners: []string{"caos", "caos"},
- },
- },
- {
- name: "two events of different aggregate different resource owner",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "503", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- generateEvent(t, "504", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "zitadel", Valid: true} }),
- },
- },
- fields: fields{
- aggregateIDs: []string{"503", "504"},
- aggregateType: t.Name(),
- },
- res: res{
- resourceOwners: []string{"caos", "zitadel"},
- },
- },
- {
- name: "events of different aggregate different resource owner",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "505", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- generateEvent(t, "505", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- generateEvent(t, "506", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "zitadel", Valid: true} }),
- generateEvent(t, "506", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "zitadel", Valid: true} }),
- },
- },
- fields: fields{
- aggregateIDs: []string{"505", "506"},
- aggregateType: t.Name(),
- },
- res: res{
- resourceOwners: []string{"caos", "caos", "zitadel", "zitadel"},
- },
- },
- {
- name: "events of different aggregate different resource owner per event",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "507", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- generateEvent(t, "507", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "ignored", Valid: true} }),
- generateEvent(t, "508", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "zitadel", Valid: true} }),
- generateEvent(t, "508", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "ignored", Valid: true} }),
- },
- },
- fields: fields{
- aggregateIDs: []string{"507", "508"},
- aggregateType: t.Name(),
- },
- res: res{
- resourceOwners: []string{"caos", "caos", "zitadel", "zitadel"},
- },
- },
- {
- name: "events of one aggregate different resource owner per event",
- args: args{
- events: []*repository.Event{
- generateEvent(t, "509", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
- generateEvent(t, "509", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "ignored", Valid: true} }),
- generateEvent(t, "509", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "ignored", Valid: true} }),
- generateEvent(t, "509", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "ignored", Valid: true} }),
- },
- },
- fields: fields{
- aggregateIDs: []string{"509"},
- aggregateType: t.Name(),
- },
- res: res{
- resourceOwners: []string{"caos", "caos", "caos", "caos"},
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- db := &CRDB{
- DB: &database.DB{
- DB: testCRDBClient,
- Database: new(testDB),
- },
- }
- if err := db.Push(context.Background(), tt.args.events); err != nil {
- t.Errorf("CRDB.Push() error = %v", err)
- }
-
- if len(tt.args.events) != len(tt.res.resourceOwners) {
- t.Errorf("length of events (%d) and resource owners (%d) must be equal", len(tt.args.events), len(tt.res.resourceOwners))
- return
- }
-
- for i, event := range tt.args.events {
- if event.ResourceOwner.String != tt.res.resourceOwners[i] {
- t.Errorf("resource owner not expected want: %q got: %q", tt.res.resourceOwners[i], event.ResourceOwner.String)
- }
- }
-
- rows, err := testCRDBClient.Query("SELECT resource_owner FROM eventstore.events WHERE aggregate_type = $1 AND aggregate_id = ANY($2) ORDER BY creation_date, event_sequence", tt.fields.aggregateType, tt.fields.aggregateIDs)
- if err != nil {
- t.Error("unable to query inserted rows: ", err)
- return
- }
-
- eventCount := 0
- for i := 0; rows.Next(); i++ {
- var resourceOwner string
- err = rows.Scan(&resourceOwner)
- if err != nil {
- t.Error("unable to scan row: ", err)
- return
- }
- if resourceOwner != tt.res.resourceOwners[i] {
- t.Errorf("unexpected resource owner in queried event. want %q, got: %q", tt.res.resourceOwners[i], resourceOwner)
- }
- eventCount++
- }
-
- if eventCount != len(tt.res.resourceOwners) {
- t.Errorf("wrong queried event count: want %d, got %d", len(tt.res.resourceOwners), eventCount)
- }
- })
- }
-}
-
-func canceledCtx() context.Context {
- ctx, cancel := context.WithCancel(context.Background())
- cancel()
- return ctx
-}
-
func generateEvent(t *testing.T, aggregateID string, opts ...func(*repository.Event)) *repository.Event {
t.Helper()
e := &repository.Event{
AggregateID: aggregateID,
- AggregateType: repository.AggregateType(t.Name()),
- EditorService: "svc",
+ AggregateType: eventstore.AggregateType(t.Name()),
EditorUser: "user",
ResourceOwner: sql.NullString{String: "ro", Valid: true},
- Type: "test.created",
+ Typ: "test.created",
Version: "v1",
+ Pos: 42,
}
for _, opt := range opts {
@@ -1217,36 +321,3 @@ func generateEvent(t *testing.T, aggregateID string, opts ...func(*repository.Ev
return e
}
-
-func generateAddUniqueConstraint(t *testing.T, table, uniqueField string) *repository.UniqueConstraint {
- t.Helper()
- e := &repository.UniqueConstraint{
- UniqueType: table,
- UniqueField: uniqueField,
- Action: repository.UniqueConstraintAdd,
- }
-
- return e
-}
-
-func generateRemoveUniqueConstraint(t *testing.T, table, uniqueField string) *repository.UniqueConstraint {
- t.Helper()
- e := &repository.UniqueConstraint{
- UniqueType: table,
- UniqueField: uniqueField,
- InstanceID: "",
- Action: repository.UniqueConstraintRemoved,
- }
-
- return e
-}
-
-func generateRemoveInstanceUniqueConstraints(t *testing.T, instanceID string) *repository.UniqueConstraint {
- t.Helper()
- e := &repository.UniqueConstraint{
- InstanceID: instanceID,
- Action: repository.UniqueConstraintInstanceRemoved,
- }
-
- return e
-}
diff --git a/internal/eventstore/repository/sql/local_crdb_test.go b/internal/eventstore/repository/sql/local_crdb_test.go
index 50c3465b10..b1aa485887 100644
--- a/internal/eventstore/repository/sql/local_crdb_test.go
+++ b/internal/eventstore/repository/sql/local_crdb_test.go
@@ -37,14 +37,14 @@ func TestMain(m *testing.M) {
ts.Stop()
}()
- if err = initDB(testCRDBClient); err != nil {
+ if err = initDB(&database.DB{DB: testCRDBClient, Database: &cockroach.Config{Database: "zitadel"}}); err != nil {
logging.WithFields("error", err).Fatal("migrations failed")
}
os.Exit(m.Run())
}
-func initDB(db *sql.DB) error {
+func initDB(db *database.DB) error {
config := new(database.Config)
config.SetConnector(&cockroach.Config{User: cockroach.User{Username: "zitadel"}, Database: "zitadel"})
@@ -60,11 +60,13 @@ func initDB(db *sql.DB) error {
return err
}
- return initialise.VerifyZitadel(db, *config)
-}
+ err = initialise.VerifyZitadel(db, *config)
+ if err != nil {
+ return err
+ }
-func fillUniqueData(unique_type, field, instanceID string) error {
- _, err := testCRDBClient.Exec("INSERT INTO eventstore.unique_constraints (unique_type, unique_field, instance_id) VALUES ($1, $2, $3)", unique_type, field, instanceID)
+ // create old events
+ _, err = db.Exec(oldEventsTable)
return err
}
@@ -76,4 +78,26 @@ func (*testDB) DatabaseName() string { return "db" }
func (*testDB) Username() string { return "user" }
-func (*testDB) Type() string { return "type" }
+func (*testDB) Type() string { return "cockroach" }
+
+const oldEventsTable = `CREATE TABLE IF NOT EXISTS eventstore.events (
+ id UUID DEFAULT gen_random_uuid()
+ , event_type TEXT NOT NULL
+ , aggregate_type TEXT NOT NULL
+ , aggregate_id TEXT NOT NULL
+ , aggregate_version TEXT NOT NULL
+ , event_sequence BIGINT NOT NULL
+ , previous_aggregate_sequence BIGINT
+ , previous_aggregate_type_sequence INT8
+ , creation_date TIMESTAMPTZ NOT NULL DEFAULT now()
+ , created_at TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()
+ , event_data JSONB
+ , editor_user TEXT NOT NULL
+ , editor_service TEXT
+ , resource_owner TEXT NOT NULL
+ , instance_id TEXT NOT NULL
+ , "position" DECIMAL NOT NULL
+ , in_tx_order INTEGER NOT NULL
+
+ , PRIMARY KEY (instance_id, aggregate_type, aggregate_id, event_sequence DESC)
+);`
diff --git a/internal/eventstore/repository/sql/query.go b/internal/eventstore/repository/sql/query.go
index 8bc3b3ac97..144a414fd1 100644
--- a/internal/eventstore/repository/sql/query.go
+++ b/internal/eventstore/repository/sql/query.go
@@ -6,6 +6,7 @@ import (
"encoding/json"
"errors"
"fmt"
+ "strconv"
"strings"
"github.com/zitadel/logging"
@@ -14,19 +15,20 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/database/dialect"
z_errors "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
)
type querier interface {
- columnName(repository.Field) string
+ columnName(field repository.Field, useV1 bool) string
operation(repository.Operation) string
conditionFormat(repository.Operation) string
placeholder(query string) string
- eventQuery() string
- maxSequenceQuery() string
- instanceIDsQuery() string
+ eventQuery(useV1 bool) string
+ maxSequenceQuery(useV1 bool) string
+ instanceIDsQuery(useV1 bool) string
db() *database.DB
- orderByEventSequence(desc bool) string
+ orderByEventSequence(desc, useV1 bool) string
dialect.Database
}
@@ -52,25 +54,38 @@ func (t *tx) QueryContext(ctx context.Context, scan func(rows *sql.Rows) error,
return rows.Err()
}
-func query(ctx context.Context, criteria querier, searchQuery *repository.SearchQuery, dest interface{}) error {
- query, rowScanner := prepareColumns(criteria, searchQuery.Columns)
- where, values := prepareCondition(criteria, searchQuery.Filters)
+func query(ctx context.Context, criteria querier, searchQuery *eventstore.SearchQueryBuilder, dest interface{}, useV1 bool) error {
+ q, err := repository.QueryFromBuilder(searchQuery)
+ if err != nil {
+ return err
+ }
+ query, rowScanner := prepareColumns(criteria, q.Columns, useV1)
+ where, values := prepareConditions(criteria, q, useV1)
if where == "" || query == "" {
return z_errors.ThrowInvalidArgument(nil, "SQL-rWeBw", "invalid query factory")
}
- if searchQuery.Tx == nil {
- if travel := prepareTimeTravel(ctx, criteria, searchQuery.AllowTimeTravel); travel != "" {
+ if q.Tx == nil {
+ if travel := prepareTimeTravel(ctx, criteria, q.AllowTimeTravel); travel != "" {
query += travel
}
}
query += where
- if searchQuery.Columns == repository.ColumnsEvent {
- query += criteria.orderByEventSequence(searchQuery.Desc)
+ // instead of using the max function of the database (which doesn't work for postgres)
+ // we select the most recent row
+ if q.Columns == eventstore.ColumnsMaxSequence {
+ q.Limit = 1
+ q.Desc = true
}
- if searchQuery.Limit > 0 {
- values = append(values, searchQuery.Limit)
+ switch q.Columns {
+ case eventstore.ColumnsEvent,
+ eventstore.ColumnsMaxSequence:
+ query += criteria.orderByEventSequence(q.Desc, useV1)
+ }
+
+ if q.Limit > 0 {
+ values = append(values, q.Limit)
query += " LIMIT ?"
}
@@ -80,11 +95,11 @@ func query(ctx context.Context, criteria querier, searchQuery *repository.Search
QueryContext(context.Context, func(rows *sql.Rows) error, string, ...interface{}) error
}
contextQuerier = criteria.db()
- if searchQuery.Tx != nil {
- contextQuerier = &tx{Tx: searchQuery.Tx}
+ if q.Tx != nil {
+ contextQuerier = &tx{Tx: q.Tx}
}
- err := contextQuerier.QueryContext(ctx,
+ err = contextQuerier.QueryContext(ctx,
func(rows *sql.Rows) error {
for rows.Next() {
err := rowScanner(rows.Scan, dest)
@@ -102,14 +117,14 @@ func query(ctx context.Context, criteria querier, searchQuery *repository.Search
return nil
}
-func prepareColumns(criteria querier, columns repository.Columns) (string, func(s scan, dest interface{}) error) {
+func prepareColumns(criteria querier, columns eventstore.Columns, useV1 bool) (string, func(s scan, dest interface{}) error) {
switch columns {
- case repository.ColumnsMaxSequence:
- return criteria.maxSequenceQuery(), maxSequenceScanner
- case repository.ColumnsInstanceIDs:
- return criteria.instanceIDsQuery(), instanceIDsScanner
- case repository.ColumnsEvent:
- return criteria.eventQuery(), eventsScanner
+ case eventstore.ColumnsMaxSequence:
+ return criteria.maxSequenceQuery(useV1), maxSequenceScanner
+ case eventstore.ColumnsInstanceIDs:
+ return criteria.instanceIDsQuery(useV1), instanceIDsScanner
+ case eventstore.ColumnsEvent:
+ return criteria.eventQuery(useV1), eventsScanner(useV1)
default:
return "", nil
}
@@ -124,11 +139,11 @@ func prepareTimeTravel(ctx context.Context, criteria querier, allow bool) string
}
func maxSequenceScanner(row scan, dest interface{}) (err error) {
- sequence, ok := dest.(*Sequence)
+ position, ok := dest.(*sql.NullFloat64)
if !ok {
- return z_errors.ThrowInvalidArgument(nil, "SQL-NBjA9", "type must be sequence")
+ return z_errors.ThrowInvalidArgumentf(nil, "SQL-NBjA9", "type must be sql.NullInt64 got: %T", dest)
}
- err = row(sequence)
+ err = row(position)
if err == nil || errors.Is(err, sql.ErrNoRows) {
return nil
}
@@ -151,84 +166,139 @@ func instanceIDsScanner(scanner scan, dest interface{}) (err error) {
return nil
}
-func eventsScanner(scanner scan, dest interface{}) (err error) {
- events, ok := dest.(*[]*repository.Event)
- if !ok {
- return z_errors.ThrowInvalidArgument(nil, "SQL-4GP6F", "type must be event")
- }
- var (
- previousAggregateSequence Sequence
- previousAggregateTypeSequence Sequence
- )
- data := make(Data, 0)
- event := new(repository.Event)
-
- err = scanner(
- &event.CreationDate,
- &event.Type,
- &event.Sequence,
- &previousAggregateSequence,
- &previousAggregateTypeSequence,
- &data,
- &event.EditorService,
- &event.EditorUser,
- &event.ResourceOwner,
- &event.InstanceID,
- &event.AggregateType,
- &event.AggregateID,
- &event.Version,
- )
-
- if err != nil {
- logging.New().WithError(err).Warn("unable to scan row")
- return z_errors.ThrowInternal(err, "SQL-M0dsf", "unable to scan row")
- }
-
- event.PreviousAggregateSequence = uint64(previousAggregateSequence)
- event.PreviousAggregateTypeSequence = uint64(previousAggregateTypeSequence)
- event.Data = make([]byte, len(data))
- copy(event.Data, data)
-
- *events = append(*events, event)
-
- return nil
-}
-
-func prepareCondition(criteria querier, filters [][]*repository.Filter) (clause string, values []interface{}) {
- values = make([]interface{}, 0, len(filters))
-
- if len(filters) == 0 {
- return clause, values
- }
-
- clauses := make([]string, len(filters))
- for idx, filter := range filters {
- subClauses := make([]string, 0, len(filter))
- for _, f := range filter {
- value := f.Value
- switch value.(type) {
- case map[string]interface{}:
- var err error
- value, err = json.Marshal(value)
- if err != nil {
- logging.WithError(err).Warn("unable to marshal search value")
- continue
- }
- }
-
- subClauses = append(subClauses, getCondition(criteria, f))
- if subClauses[len(subClauses)-1] == "" {
- return "", nil
- }
- values = append(values, value)
+func eventsScanner(useV1 bool) func(scanner scan, dest interface{}) (err error) {
+ return func(scanner scan, dest interface{}) (err error) {
+ events, ok := dest.(*[]eventstore.Event)
+ if !ok {
+ return z_errors.ThrowInvalidArgument(nil, "SQL-4GP6F", "type must be event")
}
- clauses[idx] = "( " + strings.Join(subClauses, " AND ") + " )"
+ event := new(repository.Event)
+ data := sql.RawBytes{}
+ position := new(sql.NullFloat64)
+
+ if useV1 {
+ err = scanner(
+ &event.CreationDate,
+ &event.Typ,
+ &event.Seq,
+ &data,
+ &event.EditorUser,
+ &event.ResourceOwner,
+ &event.InstanceID,
+ &event.AggregateType,
+ &event.AggregateID,
+ &event.Version,
+ )
+ } else {
+ var revision uint8
+ err = scanner(
+ &event.CreationDate,
+ &event.Typ,
+ &event.Seq,
+ position,
+ &data,
+ &event.EditorUser,
+ &event.ResourceOwner,
+ &event.InstanceID,
+ &event.AggregateType,
+ &event.AggregateID,
+ &revision,
+ )
+ event.Version = eventstore.Version("v" + strconv.Itoa(int(revision)))
+ }
+
+ if err != nil {
+ logging.New().WithError(err).Warn("unable to scan row")
+ return z_errors.ThrowInternal(err, "SQL-M0dsf", "unable to scan row")
+ }
+
+ event.Data = make([]byte, len(data))
+ copy(event.Data, data)
+ event.Pos = position.Float64
+
+ *events = append(*events, event)
+
+ return nil
}
- return " WHERE " + strings.Join(clauses, " OR "), values
}
-func getCondition(cond querier, filter *repository.Filter) (condition string) {
- field := cond.columnName(filter.Field)
+func prepareConditions(criteria querier, query *repository.SearchQuery, useV1 bool) (string, []any) {
+ clauses, args := prepareQuery(criteria, useV1, query.InstanceID, query.ExcludedInstances)
+ if clauses != "" && len(query.SubQueries) > 0 {
+ clauses += " AND "
+ }
+ subClauses := make([]string, len(query.SubQueries))
+ for i, filters := range query.SubQueries {
+ var subArgs []any
+ subClauses[i], subArgs = prepareQuery(criteria, useV1, filters...)
+ // an error is thrown in [query]
+ if subClauses[i] == "" {
+ return "", nil
+ }
+ if len(query.SubQueries) > 1 && len(subArgs) > 1 {
+ subClauses[i] = "(" + subClauses[i] + ")"
+ }
+ args = append(args, subArgs...)
+ }
+ if len(subClauses) == 1 {
+ clauses += subClauses[0]
+ } else if len(subClauses) > 1 {
+ clauses += "(" + strings.Join(subClauses, " OR ") + ")"
+ }
+
+ additionalClauses, additionalArgs := prepareQuery(criteria, useV1, query.Position, query.Owner, query.Sequence, query.CreatedAt, query.Creator)
+ if additionalClauses != "" {
+ if clauses != "" {
+ clauses += " AND "
+ }
+ clauses += additionalClauses
+ args = append(args, additionalArgs...)
+ }
+
+ if query.AwaitOpenTransactions {
+ clauses += awaitOpenTransactions(useV1)
+ }
+
+ if clauses == "" {
+ return "", nil
+ }
+
+ return " WHERE " + clauses, args
+}
+
+func prepareQuery(criteria querier, useV1 bool, filters ...*repository.Filter) (_ string, args []any) {
+ clauses := make([]string, 0, len(filters))
+ args = make([]any, 0, len(filters))
+ for _, filter := range filters {
+ if filter == nil {
+ continue
+ }
+ arg := filter.Value
+
+ // marshal if payload filter
+ if filter.Field == repository.FieldEventData {
+ var err error
+ arg, err = json.Marshal(arg)
+ if err != nil {
+ logging.WithError(err).Warn("unable to marshal search value")
+ continue
+ }
+
+ }
+
+ clauses = append(clauses, getCondition(criteria, filter, useV1))
+ // if mapping failed an error is thrown in [query]
+ if clauses[len(clauses)-1] == "" {
+ return "", nil
+ }
+ args = append(args, arg)
+ }
+
+ return strings.Join(clauses, " AND "), args
+}
+
+func getCondition(cond querier, filter *repository.Filter, useV1 bool) (condition string) {
+ field := cond.columnName(filter.Field, useV1)
operation := cond.operation(filter.Operation)
if field == "" || operation == "" {
return ""
diff --git a/internal/eventstore/repository/sql/query_test.go b/internal/eventstore/repository/sql/query_test.go
index d7438ed273..478191ec1e 100644
--- a/internal/eventstore/repository/sql/query_test.go
+++ b/internal/eventstore/repository/sql/query_test.go
@@ -5,13 +5,16 @@ import (
"database/sql"
"database/sql/driver"
"reflect"
+ "strconv"
"testing"
"time"
"github.com/DATA-DOG/go-sqlmock"
"github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/database/cockroach"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/repository"
)
@@ -32,38 +35,38 @@ func Test_getCondition(t *testing.T) {
{
name: "greater",
args: args{filter: repository.NewFilter(repository.FieldSequence, 0, repository.OperationGreater)},
- want: "event_sequence > ?",
+ want: `"sequence" > ?`,
},
{
name: "less",
args: args{filter: repository.NewFilter(repository.FieldSequence, 5000, repository.OperationLess)},
- want: "event_sequence < ?",
+ want: `"sequence" < ?`,
},
{
name: "in list",
- args: args{filter: repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"movies", "actors"}, repository.OperationIn)},
+ args: args{filter: repository.NewFilter(repository.FieldAggregateType, []eventstore.AggregateType{"movies", "actors"}, repository.OperationIn)},
want: "aggregate_type = ANY(?)",
},
{
name: "invalid operation",
- args: args{filter: repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"movies", "actors"}, repository.Operation(-1))},
+ args: args{filter: repository.NewFilter(repository.FieldAggregateType, []eventstore.AggregateType{"movies", "actors"}, repository.Operation(-1))},
want: "",
},
{
name: "invalid field",
- args: args{filter: repository.NewFilter(repository.Field(-1), []repository.AggregateType{"movies", "actors"}, repository.OperationEquals)},
+ args: args{filter: repository.NewFilter(repository.Field(-1), []eventstore.AggregateType{"movies", "actors"}, repository.OperationEquals)},
want: "",
},
{
name: "invalid field and operation",
- args: args{filter: repository.NewFilter(repository.Field(-1), []repository.AggregateType{"movies", "actors"}, repository.Operation(-1))},
+ args: args{filter: repository.NewFilter(repository.Field(-1), []eventstore.AggregateType{"movies", "actors"}, repository.Operation(-1))},
want: "",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
db := &CRDB{}
- if got := getCondition(db, tt.args.filter); got != tt.want {
+ if got := getCondition(db, tt.args.filter, false); got != tt.want {
t.Errorf("getCondition() = %v, want %v", got, tt.want)
}
})
@@ -75,9 +78,10 @@ func Test_prepareColumns(t *testing.T) {
dbRow []interface{}
}
type args struct {
- columns repository.Columns
+ columns eventstore.Columns
dest interface{}
dbErr error
+ useV1 bool
}
type res struct {
query string
@@ -92,7 +96,7 @@ func Test_prepareColumns(t *testing.T) {
}{
{
name: "invalid columns",
- args: args{columns: repository.Columns(-1)},
+ args: args{columns: eventstore.Columns(-1)},
res: res{
query: "",
dbErr: func(err error) bool { return err == nil },
@@ -101,64 +105,114 @@ func Test_prepareColumns(t *testing.T) {
{
name: "max column",
args: args{
- columns: repository.ColumnsMaxSequence,
- dest: new(Sequence),
+ columns: eventstore.ColumnsMaxSequence,
+ dest: new(sql.NullFloat64),
+ useV1: true,
},
res: res{
- query: "SELECT MAX(event_sequence) FROM eventstore.events",
- expected: Sequence(5),
+ query: `SELECT event_sequence FROM eventstore.events`,
+ expected: sql.NullFloat64{Float64: 43, Valid: true},
},
fields: fields{
- dbRow: []interface{}{Sequence(5)},
+ dbRow: []interface{}{sql.NullFloat64{Float64: 43, Valid: true}},
+ },
+ },
+ {
+ name: "max column v2",
+ args: args{
+ columns: eventstore.ColumnsMaxSequence,
+ dest: new(sql.NullFloat64),
+ },
+ res: res{
+ query: `SELECT "position" FROM eventstore.events2`,
+ expected: sql.NullFloat64{Float64: 43, Valid: true},
+ },
+ fields: fields{
+ dbRow: []interface{}{sql.NullFloat64{Float64: 43, Valid: true}},
},
},
{
name: "max sequence wrong dest type",
args: args{
- columns: repository.ColumnsMaxSequence,
+ columns: eventstore.ColumnsMaxSequence,
dest: new(uint64),
},
res: res{
- query: "SELECT MAX(event_sequence) FROM eventstore.events",
+ query: `SELECT "position" FROM eventstore.events2`,
dbErr: errors.IsErrorInvalidArgument,
},
},
{
name: "events",
args: args{
- columns: repository.ColumnsEvent,
- dest: &[]*repository.Event{},
+ columns: eventstore.ColumnsEvent,
+ dest: &[]eventstore.Event{},
+ useV1: true,
},
res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events",
- expected: []*repository.Event{
- {AggregateID: "hodor", AggregateType: "user", Sequence: 5, Data: make(Data, 0)},
+ query: `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events`,
+ expected: []eventstore.Event{
+ &repository.Event{AggregateID: "hodor", AggregateType: "user", Seq: 5, Data: make(sql.RawBytes, 0)},
},
},
fields: fields{
- dbRow: []interface{}{time.Time{}, repository.EventType(""), uint64(5), Sequence(0), Sequence(0), Data(nil), "", "", sql.NullString{String: ""}, "", repository.AggregateType("user"), "hodor", repository.Version("")},
+ dbRow: []interface{}{time.Time{}, eventstore.EventType(""), uint64(5), sql.RawBytes(nil), "", sql.NullString{}, "", eventstore.AggregateType("user"), "hodor", eventstore.Version("")},
+ },
+ },
+ {
+ name: "events v2",
+ args: args{
+ columns: eventstore.ColumnsEvent,
+ dest: &[]eventstore.Event{},
+ },
+ res: res{
+ query: `SELECT created_at, event_type, "sequence", "position", payload, creator, "owner", instance_id, aggregate_type, aggregate_id, revision FROM eventstore.events2`,
+ expected: []eventstore.Event{
+ &repository.Event{AggregateID: "hodor", AggregateType: "user", Seq: 5, Pos: 42, Data: make(sql.RawBytes, 0), Version: "v1"},
+ },
+ },
+ fields: fields{
+ dbRow: []interface{}{time.Time{}, eventstore.EventType(""), uint64(5), sql.NullFloat64{Float64: 42, Valid: true}, sql.RawBytes(nil), "", sql.NullString{}, "", eventstore.AggregateType("user"), "hodor", uint8(1)},
+ },
+ },
+ {
+ name: "event null position",
+ args: args{
+ columns: eventstore.ColumnsEvent,
+ dest: &[]eventstore.Event{},
+ },
+ res: res{
+ query: `SELECT created_at, event_type, "sequence", "position", payload, creator, "owner", instance_id, aggregate_type, aggregate_id, revision FROM eventstore.events2`,
+ expected: []eventstore.Event{
+ &repository.Event{AggregateID: "hodor", AggregateType: "user", Seq: 5, Pos: 0, Data: make(sql.RawBytes, 0), Version: "v1"},
+ },
+ },
+ fields: fields{
+ dbRow: []interface{}{time.Time{}, eventstore.EventType(""), uint64(5), sql.NullFloat64{Float64: 0, Valid: false}, sql.RawBytes(nil), "", sql.NullString{}, "", eventstore.AggregateType("user"), "hodor", uint8(1)},
},
},
{
name: "events wrong dest type",
args: args{
- columns: repository.ColumnsEvent,
+ columns: eventstore.ColumnsEvent,
dest: []*repository.Event{},
+ useV1: true,
},
res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events",
+ query: `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events`,
dbErr: errors.IsErrorInvalidArgument,
},
},
{
name: "event query error",
args: args{
- columns: repository.ColumnsEvent,
- dest: &[]*repository.Event{},
+ columns: eventstore.ColumnsEvent,
+ dest: &[]eventstore.Event{},
dbErr: sql.ErrConnDone,
+ useV1: true,
},
res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events",
+ query: `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events`,
dbErr: errors.IsInternal,
},
},
@@ -166,7 +220,7 @@ func Test_prepareColumns(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
crdb := &CRDB{}
- query, rowScanner := prepareColumns(crdb, tt.args.columns)
+ query, rowScanner := prepareColumns(crdb, tt.args.columns, tt.args.useV1)
if query != tt.res.query {
t.Errorf("prepareColumns() got = %s, want %s", query, tt.res.query)
}
@@ -184,8 +238,13 @@ func Test_prepareColumns(t *testing.T) {
if tt.res.dbErr != nil && tt.res.dbErr(err) {
return
}
- if !reflect.DeepEqual(reflect.Indirect(reflect.ValueOf(tt.args.dest)).Interface(), tt.res.expected) {
- t.Errorf("unexpected result from rowScanner \nwant: %+v \ngot: %+v", tt.fields.dbRow, reflect.Indirect(reflect.ValueOf(tt.args.dest)).Interface())
+ if equalizer, ok := tt.res.expected.(interface{ Equal(time.Time) bool }); ok {
+ equalizer.Equal(tt.args.dest.(*sql.NullTime).Time)
+ return
+ }
+ got := reflect.Indirect(reflect.ValueOf(tt.args.dest)).Interface()
+ if !reflect.DeepEqual(got, tt.res.expected) {
+ t.Errorf("unexpected result from rowScanner \nwant: %+v \ngot: %+v", tt.res.expected, got)
}
})
}
@@ -200,6 +259,13 @@ func prepareTestScan(err error, res []interface{}) scan {
return errors.ThrowInvalidArgumentf(nil, "SQL-NML1q", "expected len %d got %d", len(res), len(dests))
}
for i, r := range res {
+ _, ok := dests[i].(*eventstore.Version)
+ if ok {
+ val, ok := r.(uint8)
+ if ok {
+ r = eventstore.Version("" + strconv.Itoa(int(val)))
+ }
+ }
reflect.ValueOf(dests[i]).Elem().Set(reflect.ValueOf(r))
}
@@ -209,7 +275,8 @@ func prepareTestScan(err error, res []interface{}) scan {
func Test_prepareCondition(t *testing.T) {
type args struct {
- filters [][]*repository.Filter
+ query *repository.SearchQuery
+ useV1 bool
}
type res struct {
clause string
@@ -223,7 +290,18 @@ func Test_prepareCondition(t *testing.T) {
{
name: "nil filters",
args: args{
- filters: nil,
+ query: &repository.SearchQuery{},
+ useV1: true,
+ },
+ res: res{
+ clause: "",
+ values: nil,
+ },
+ },
+ {
+ name: "nil filters v2",
+ args: args{
+ query: &repository.SearchQuery{},
},
res: res{
clause: "",
@@ -233,7 +311,22 @@ func Test_prepareCondition(t *testing.T) {
{
name: "empty filters",
args: args{
- filters: [][]*repository.Filter{},
+ query: &repository.SearchQuery{
+ SubQueries: [][]*repository.Filter{},
+ },
+ useV1: true,
+ },
+ res: res{
+ clause: "",
+ values: nil,
+ },
+ },
+ {
+ name: "empty filters v2",
+ args: args{
+ query: &repository.SearchQuery{
+ SubQueries: [][]*repository.Filter{},
+ },
},
res: res{
clause: "",
@@ -243,9 +336,28 @@ func Test_prepareCondition(t *testing.T) {
{
name: "invalid condition",
args: args{
- filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateID, "wrong", repository.Operation(-1)),
+ query: &repository.SearchQuery{
+ SubQueries: [][]*repository.Filter{
+ {
+ repository.NewFilter(repository.FieldAggregateID, "wrong", repository.Operation(-1)),
+ },
+ },
+ },
+ useV1: true,
+ },
+ res: res{
+ clause: "",
+ values: nil,
+ },
+ },
+ {
+ name: "invalid condition v2",
+ args: args{
+ query: &repository.SearchQuery{
+ SubQueries: [][]*repository.Filter{
+ {
+ repository.NewFilter(repository.FieldAggregateID, "wrong", repository.Operation(-1)),
+ },
},
},
},
@@ -257,38 +369,82 @@ func Test_prepareCondition(t *testing.T) {
{
name: "array as condition value",
args: args{
- filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"user", "org"}, repository.OperationIn),
+ query: &repository.SearchQuery{
+ AwaitOpenTransactions: true,
+ SubQueries: [][]*repository.Filter{
+ {
+ repository.NewFilter(repository.FieldAggregateType, []eventstore.AggregateType{"user", "org"}, repository.OperationIn),
+ },
+ },
+ },
+ useV1: true,
+ },
+ res: res{
+ clause: " WHERE aggregate_type = ANY(?) AND creation_date::TIMESTAMP < (SELECT COALESCE(MIN(start), NOW())::TIMESTAMP FROM crdb_internal.cluster_transactions where application_name = 'zitadel_es_pusher')",
+ values: []interface{}{[]eventstore.AggregateType{"user", "org"}},
+ },
+ },
+ {
+ name: "array as condition value v2",
+ args: args{
+ query: &repository.SearchQuery{
+ AwaitOpenTransactions: true,
+ SubQueries: [][]*repository.Filter{
+ {
+ repository.NewFilter(repository.FieldAggregateType, []eventstore.AggregateType{"user", "org"}, repository.OperationIn),
+ },
},
},
},
res: res{
- clause: " WHERE ( aggregate_type = ANY(?) )",
- values: []interface{}{[]repository.AggregateType{"user", "org"}},
+ clause: ` WHERE aggregate_type = ANY(?) AND hlc_to_timestamp("position") < (SELECT COALESCE(MIN(start), NOW())::TIMESTAMP FROM crdb_internal.cluster_transactions where application_name = 'zitadel_es_pusher')`,
+ values: []interface{}{[]eventstore.AggregateType{"user", "org"}},
},
},
{
name: "multiple filters",
args: args{
- filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, []repository.AggregateType{"user", "org"}, repository.OperationIn),
- repository.NewFilter(repository.FieldAggregateID, "1234", repository.OperationEquals),
- repository.NewFilter(repository.FieldEventType, []repository.EventType{"user.created", "org.created"}, repository.OperationIn),
+ query: &repository.SearchQuery{
+ AwaitOpenTransactions: true,
+ SubQueries: [][]*repository.Filter{
+ {
+ repository.NewFilter(repository.FieldAggregateType, []eventstore.AggregateType{"user", "org"}, repository.OperationIn),
+ repository.NewFilter(repository.FieldAggregateID, "1234", repository.OperationEquals),
+ repository.NewFilter(repository.FieldEventType, []eventstore.EventType{"user.created", "org.created"}, repository.OperationIn),
+ },
+ },
+ },
+ useV1: true,
+ },
+ res: res{
+ clause: " WHERE aggregate_type = ANY(?) AND aggregate_id = ? AND event_type = ANY(?) AND creation_date::TIMESTAMP < (SELECT COALESCE(MIN(start), NOW())::TIMESTAMP FROM crdb_internal.cluster_transactions where application_name = 'zitadel_es_pusher')",
+ values: []interface{}{[]eventstore.AggregateType{"user", "org"}, "1234", []eventstore.EventType{"user.created", "org.created"}},
+ },
+ },
+ {
+ name: "multiple filters v2",
+ args: args{
+ query: &repository.SearchQuery{
+ AwaitOpenTransactions: true,
+ SubQueries: [][]*repository.Filter{
+ {
+ repository.NewFilter(repository.FieldAggregateType, []eventstore.AggregateType{"user", "org"}, repository.OperationIn),
+ repository.NewFilter(repository.FieldAggregateID, "1234", repository.OperationEquals),
+ repository.NewFilter(repository.FieldEventType, []eventstore.EventType{"user.created", "org.created"}, repository.OperationIn),
+ },
},
},
},
res: res{
- clause: " WHERE ( aggregate_type = ANY(?) AND aggregate_id = ? AND event_type = ANY(?) )",
- values: []interface{}{[]repository.AggregateType{"user", "org"}, "1234", []repository.EventType{"user.created", "org.created"}},
+ clause: ` WHERE aggregate_type = ANY(?) AND aggregate_id = ? AND event_type = ANY(?) AND hlc_to_timestamp("position") < (SELECT COALESCE(MIN(start), NOW())::TIMESTAMP FROM crdb_internal.cluster_transactions where application_name = 'zitadel_es_pusher')`,
+ values: []interface{}{[]eventstore.AggregateType{"user", "org"}, "1234", []eventstore.EventType{"user.created", "org.created"}},
},
},
}
+ crdb := NewCRDB(&database.DB{Database: new(cockroach.Config)})
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- crdb := &CRDB{}
- gotClause, gotValues := prepareCondition(crdb, tt.args.filters)
+ gotClause, gotValues := prepareConditions(crdb, tt.args.query, tt.args.useV1)
if gotClause != tt.res.clause {
t.Errorf("prepareCondition() gotClause = %v, want %v", gotClause, tt.res.clause)
}
@@ -307,10 +463,10 @@ func Test_prepareCondition(t *testing.T) {
func Test_query_events_with_crdb(t *testing.T) {
type args struct {
- searchQuery *repository.SearchQuery
+ searchQuery *eventstore.SearchQueryBuilder
}
type fields struct {
- existingEvents []*repository.Event
+ existingEvents []eventstore.Command
client *sql.DB
}
type res struct {
@@ -326,18 +482,14 @@ func Test_query_events_with_crdb(t *testing.T) {
{
name: "aggregate type filter no events",
args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, "not found", repository.OperationEquals),
- },
- },
- },
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AddQuery().
+ AggregateTypes("not found").
+ Builder(),
},
fields: fields{
client: testCRDBClient,
- existingEvents: []*repository.Event{
+ existingEvents: []eventstore.Command{
generateEvent(t, "300"),
generateEvent(t, "300"),
generateEvent(t, "300"),
@@ -351,18 +503,14 @@ func Test_query_events_with_crdb(t *testing.T) {
{
name: "aggregate type filter events found",
args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, t.Name(), repository.OperationEquals),
- },
- },
- },
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AddQuery().
+ AggregateTypes(eventstore.AggregateType(t.Name())).
+ Builder(),
},
fields: fields{
client: testCRDBClient,
- existingEvents: []*repository.Event{
+ existingEvents: []eventstore.Command{
generateEvent(t, "301"),
generateEvent(t, "302"),
generateEvent(t, "302"),
@@ -377,19 +525,15 @@ func Test_query_events_with_crdb(t *testing.T) {
{
name: "aggregate type and id filter events found",
args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, t.Name(), repository.OperationEquals),
- repository.NewFilter(repository.FieldAggregateID, "303", repository.OperationEquals),
- },
- },
- },
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AddQuery().
+ AggregateTypes(eventstore.AggregateType(t.Name())).
+ AggregateIDs("303").
+ Builder(),
},
fields: fields{
client: testCRDBClient,
- existingEvents: []*repository.Event{
+ existingEvents: []eventstore.Command{
generateEvent(t, "303"),
generateEvent(t, "303"),
generateEvent(t, "303"),
@@ -405,18 +549,12 @@ func Test_query_events_with_crdb(t *testing.T) {
{
name: "resource owner filter events found",
args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldResourceOwner, "caos", repository.OperationEquals),
- },
- },
- },
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ ResourceOwner("caos"),
},
fields: fields{
client: testCRDBClient,
- existingEvents: []*repository.Event{
+ existingEvents: []eventstore.Command{
generateEvent(t, "306", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
generateEvent(t, "307", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
generateEvent(t, "308", func(e *repository.Event) { e.ResourceOwner = sql.NullString{String: "caos", Valid: true} }),
@@ -429,90 +567,26 @@ func Test_query_events_with_crdb(t *testing.T) {
},
wantErr: false,
},
- {
- name: "editor service filter events found",
- args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldEditorService, "MANAGEMENT-API", repository.OperationEquals),
- repository.NewFilter(repository.FieldEditorService, "ADMIN-API", repository.OperationEquals),
- },
- },
- },
- },
- fields: fields{
- client: testCRDBClient,
- existingEvents: []*repository.Event{
- generateEvent(t, "307", func(e *repository.Event) { e.EditorService = "MANAGEMENT-API" }),
- generateEvent(t, "307", func(e *repository.Event) { e.EditorService = "MANAGEMENT-API" }),
- generateEvent(t, "308", func(e *repository.Event) { e.EditorService = "ADMIN-API" }),
- generateEvent(t, "309", func(e *repository.Event) { e.EditorService = "AUTHAPI" }),
- generateEvent(t, "309", func(e *repository.Event) { e.EditorService = "AUTHAPI" }),
- },
- },
- res: res{
- eventCount: 3,
- },
- wantErr: false,
- },
- {
- name: "editor user filter events found",
- args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldEditorUser, "adlerhurst", repository.OperationEquals),
- repository.NewFilter(repository.FieldEditorUser, "nobody", repository.OperationEquals),
- repository.NewFilter(repository.FieldEditorUser, "", repository.OperationEquals),
- },
- },
- },
- },
- fields: fields{
- client: testCRDBClient,
- existingEvents: []*repository.Event{
- generateEvent(t, "310", func(e *repository.Event) { e.EditorUser = "adlerhurst" }),
- generateEvent(t, "310", func(e *repository.Event) { e.EditorUser = "adlerhurst" }),
- generateEvent(t, "310", func(e *repository.Event) { e.EditorUser = "nobody" }),
- generateEvent(t, "311", func(e *repository.Event) { e.EditorUser = "" }),
- generateEvent(t, "311", func(e *repository.Event) { e.EditorUser = "" }),
- generateEvent(t, "312", func(e *repository.Event) { e.EditorUser = "fforootd" }),
- generateEvent(t, "312", func(e *repository.Event) { e.EditorUser = "fforootd" }),
- },
- },
- res: res{
- eventCount: 5,
- },
- wantErr: false,
- },
{
name: "event type filter events found",
args: args{
- searchQuery: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldEventType, repository.EventType("user.created"), repository.OperationEquals),
- repository.NewFilter(repository.FieldEventType, repository.EventType("user.updated"), repository.OperationEquals),
- },
- },
- },
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AddQuery().
+ EventTypes("user.created", "user.updated").
+ Builder(),
},
fields: fields{
client: testCRDBClient,
- existingEvents: []*repository.Event{
- generateEvent(t, "311", func(e *repository.Event) { e.Type = "user.created" }),
- generateEvent(t, "311", func(e *repository.Event) { e.Type = "user.updated" }),
- generateEvent(t, "311", func(e *repository.Event) { e.Type = "user.deactivated" }),
- generateEvent(t, "311", func(e *repository.Event) { e.Type = "user.locked" }),
- generateEvent(t, "312", func(e *repository.Event) { e.Type = "user.created" }),
- generateEvent(t, "312", func(e *repository.Event) { e.Type = "user.updated" }),
- generateEvent(t, "312", func(e *repository.Event) { e.Type = "user.deactivated" }),
- generateEvent(t, "312", func(e *repository.Event) { e.Type = "user.reactivated" }),
- generateEvent(t, "313", func(e *repository.Event) { e.Type = "user.locked" }),
+ existingEvents: []eventstore.Command{
+ generateEvent(t, "311", func(e *repository.Event) { e.Typ = "user.created" }),
+ generateEvent(t, "311", func(e *repository.Event) { e.Typ = "user.updated" }),
+ generateEvent(t, "311", func(e *repository.Event) { e.Typ = "user.deactivated" }),
+ generateEvent(t, "311", func(e *repository.Event) { e.Typ = "user.locked" }),
+ generateEvent(t, "312", func(e *repository.Event) { e.Typ = "user.created" }),
+ generateEvent(t, "312", func(e *repository.Event) { e.Typ = "user.updated" }),
+ generateEvent(t, "312", func(e *repository.Event) { e.Typ = "user.deactivated" }),
+ generateEvent(t, "312", func(e *repository.Event) { e.Typ = "user.reactivated" }),
+ generateEvent(t, "313", func(e *repository.Event) { e.Typ = "user.locked" }),
},
},
res: res{
@@ -523,11 +597,11 @@ func Test_query_events_with_crdb(t *testing.T) {
{
name: "fail because no filter",
args: args{
- searchQuery: &repository.SearchQuery{},
+ searchQuery: eventstore.NewSearchQueryBuilder(eventstore.Columns(-1)),
},
fields: fields{
client: testCRDBClient,
- existingEvents: []*repository.Event{},
+ existingEvents: []eventstore.Command{},
},
res: res{
eventCount: 0,
@@ -542,17 +616,16 @@ func Test_query_events_with_crdb(t *testing.T) {
DB: tt.fields.client,
Database: new(testDB),
},
- AllowOrderByCreationDate: true,
}
// setup initial data for query
- if err := db.Push(context.Background(), tt.fields.existingEvents); err != nil {
+ if _, err := db.Push(context.Background(), tt.fields.existingEvents...); err != nil {
t.Errorf("error in setup = %v", err)
return
}
- events := []*repository.Event{}
- if err := query(context.Background(), db, tt.args.searchQuery, &events); (err != nil) != tt.wantErr {
+ events := []eventstore.Event{}
+ if err := query(context.Background(), db, tt.args.searchQuery, &events, true); (err != nil) != tt.wantErr {
t.Errorf("CRDB.query() error = %v, wantErr %v", err, tt.wantErr)
}
})
@@ -561,7 +634,7 @@ func Test_query_events_with_crdb(t *testing.T) {
func Test_query_events_mocked(t *testing.T) {
type args struct {
- query *repository.SearchQuery
+ query *eventstore.SearchQueryBuilder
dest interface{}
}
type res struct {
@@ -580,24 +653,17 @@ func Test_query_events_mocked(t *testing.T) {
name: "with order by desc",
args: args{
dest: &[]*repository.Event{},
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: true,
- Filters: [][]*repository.Filter{
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("user"),
- Operation: repository.OperationEquals,
- },
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ OrderDesc().
+ AwaitOpenTransactions().
+ AddQuery().
+ AggregateTypes("user").
+ Builder(),
},
fields: fields{
mock: newMockClient(t).expectQuery(t,
- `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE \( aggregate_type = \$1 \) ORDER BY creation_date DESC, event_sequence DESC`,
- []driver.Value{repository.AggregateType("user")},
+ `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE aggregate_type = \$1 AND creation_date::TIMESTAMP < \(SELECT COALESCE\(MIN\(start\), NOW\(\)\)::TIMESTAMP FROM crdb_internal\.cluster_transactions where application_name = 'zitadel_es_pusher'\) ORDER BY event_sequence DESC`,
+ []driver.Value{eventstore.AggregateType("user")},
),
},
res: res{
@@ -608,25 +674,18 @@ func Test_query_events_mocked(t *testing.T) {
name: "with limit",
args: args{
dest: &[]*repository.Event{},
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 5,
- Filters: [][]*repository.Filter{
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("user"),
- Operation: repository.OperationEquals,
- },
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ OrderAsc().
+ AwaitOpenTransactions().
+ Limit(5).
+ AddQuery().
+ AggregateTypes("user").
+ Builder(),
},
fields: fields{
mock: newMockClient(t).expectQuery(t,
- `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE \( aggregate_type = \$1 \) ORDER BY creation_date, event_sequence LIMIT \$2`,
- []driver.Value{repository.AggregateType("user"), uint64(5)},
+ `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE aggregate_type = \$1 AND creation_date::TIMESTAMP < \(SELECT COALESCE\(MIN\(start\), NOW\(\)\)::TIMESTAMP FROM crdb_internal\.cluster_transactions where application_name = 'zitadel_es_pusher'\) ORDER BY event_sequence LIMIT \$2`,
+ []driver.Value{eventstore.AggregateType("user"), uint64(5)},
),
},
res: res{
@@ -637,25 +696,18 @@ func Test_query_events_mocked(t *testing.T) {
name: "with limit and order by desc",
args: args{
dest: &[]*repository.Event{},
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: true,
- Limit: 5,
- Filters: [][]*repository.Filter{
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("user"),
- Operation: repository.OperationEquals,
- },
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ OrderDesc().
+ AwaitOpenTransactions().
+ Limit(5).
+ AddQuery().
+ AggregateTypes("user").
+ Builder(),
},
fields: fields{
mock: newMockClient(t).expectQuery(t,
- `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE \( aggregate_type = \$1 \) ORDER BY creation_date DESC, event_sequence DESC LIMIT \$2`,
- []driver.Value{repository.AggregateType("user"), uint64(5)},
+ `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE aggregate_type = \$1 AND creation_date::TIMESTAMP < \(SELECT COALESCE\(MIN\(start\), NOW\(\)\)::TIMESTAMP FROM crdb_internal\.cluster_transactions where application_name = 'zitadel_es_pusher'\) ORDER BY event_sequence DESC LIMIT \$2`,
+ []driver.Value{eventstore.AggregateType("user"), uint64(5)},
),
},
res: res{
@@ -666,26 +718,19 @@ func Test_query_events_mocked(t *testing.T) {
name: "with limit and order by desc as of system time",
args: args{
dest: &[]*repository.Event{},
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: true,
- Limit: 5,
- AllowTimeTravel: true,
- Filters: [][]*repository.Filter{
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("user"),
- Operation: repository.OperationEquals,
- },
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ OrderDesc().
+ AwaitOpenTransactions().
+ Limit(5).
+ AllowTimeTravel().
+ AddQuery().
+ AggregateTypes("user").
+ Builder(),
},
fields: fields{
mock: newMockClient(t).expectQuery(t,
- `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events AS OF SYSTEM TIME '-1 ms' WHERE \( aggregate_type = \$1 \) ORDER BY creation_date DESC, event_sequence DESC LIMIT \$2`,
- []driver.Value{repository.AggregateType("user"), uint64(5)},
+ `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events AS OF SYSTEM TIME '-1 ms' WHERE aggregate_type = \$1 AND creation_date::TIMESTAMP < \(SELECT COALESCE\(MIN\(start\), NOW\(\)\)::TIMESTAMP FROM crdb_internal\.cluster_transactions where application_name = 'zitadel_es_pusher'\) ORDER BY event_sequence DESC LIMIT \$2`,
+ []driver.Value{eventstore.AggregateType("user"), uint64(5)},
),
},
res: res{
@@ -696,25 +741,18 @@ func Test_query_events_mocked(t *testing.T) {
name: "error sql conn closed",
args: args{
dest: &[]*repository.Event{},
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: true,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("user"),
- Operation: repository.OperationEquals,
- },
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ OrderDesc().
+ AwaitOpenTransactions().
+ Limit(0).
+ AddQuery().
+ AggregateTypes("user").
+ Builder(),
},
fields: fields{
mock: newMockClient(t).expectQueryErr(t,
- `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE \( aggregate_type = \$1 \) ORDER BY creation_date DESC, event_sequence DESC`,
- []driver.Value{repository.AggregateType("user")},
+ `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE aggregate_type = \$1 AND creation_date::TIMESTAMP < \(SELECT COALESCE\(MIN\(start\), NOW\(\)\)::TIMESTAMP FROM crdb_internal\.cluster_transactions where application_name = 'zitadel_es_pusher'\) ORDER BY event_sequence DESC`,
+ []driver.Value{eventstore.AggregateType("user")},
sql.ErrConnDone),
},
res: res{
@@ -725,26 +763,19 @@ func Test_query_events_mocked(t *testing.T) {
name: "error unexpected dest",
args: args{
dest: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: true,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("user"),
- Operation: repository.OperationEquals,
- },
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ OrderDesc().
+ AwaitOpenTransactions().
+ Limit(0).
+ AddQuery().
+ AggregateTypes("user").
+ Builder(),
},
fields: fields{
mock: newMockClient(t).expectQueryScanErr(t,
- `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE \( aggregate_type = \$1 \) ORDER BY creation_date DESC, event_sequence DESC`,
- []driver.Value{repository.AggregateType("user")},
- &repository.Event{Sequence: 100}),
+ `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE aggregate_type = \$1 AND creation_date::TIMESTAMP < \(SELECT COALESCE\(MIN\(start\), NOW\(\)\)::TIMESTAMP FROM crdb_internal\.cluster_transactions where application_name = 'zitadel_es_pusher'\) ORDER BY event_sequence DESC`,
+ []driver.Value{eventstore.AggregateType("user")},
+ &repository.Event{Seq: 100}),
},
res: res{
wantErr: true,
@@ -753,25 +784,7 @@ func Test_query_events_mocked(t *testing.T) {
{
name: "error no columns",
args: args{
- query: &repository.SearchQuery{
- Columns: repository.Columns(-1),
- },
- },
- res: res{
- wantErr: true,
- },
- },
- {
- name: "invalid condition",
- args: args{
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Filters: [][]*repository.Filter{
- {
- {},
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.Columns(-1)),
},
res: res{
wantErr: true,
@@ -781,37 +794,21 @@ func Test_query_events_mocked(t *testing.T) {
name: "with subqueries",
args: args{
dest: &[]*repository.Event{},
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: true,
- Limit: 5,
- Filters: [][]*repository.Filter{
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("user"),
- Operation: repository.OperationEquals,
- },
- },
- {
- {
- Field: repository.FieldAggregateType,
- Value: repository.AggregateType("org"),
- Operation: repository.OperationEquals,
- },
- {
- Field: repository.FieldAggregateID,
- Value: "asdf42",
- Operation: repository.OperationEquals,
- },
- },
- },
- },
+ query: eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ OrderDesc().
+ AwaitOpenTransactions().
+ Limit(5).
+ AddQuery().
+ AggregateTypes("user").
+ Or().
+ AggregateTypes("org").
+ AggregateIDs("asdf42").
+ Builder(),
},
fields: fields{
mock: newMockClient(t).expectQuery(t,
- `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, previous_aggregate_type_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE \( aggregate_type = \$1 \) OR \( aggregate_type = \$2 AND aggregate_id = \$3 \) ORDER BY creation_date DESC, event_sequence DESC LIMIT \$4`,
- []driver.Value{repository.AggregateType("user"), repository.AggregateType("org"), "asdf42", uint64(5)},
+ `SELECT creation_date, event_type, event_sequence, event_data, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events WHERE \(aggregate_type = \$1 OR \(aggregate_type = \$2 AND aggregate_id = \$3\)\) AND creation_date::TIMESTAMP < \(SELECT COALESCE\(MIN\(start\), NOW\(\)\)::TIMESTAMP FROM crdb_internal\.cluster_transactions where application_name = 'zitadel_es_pusher'\) ORDER BY event_sequence DESC LIMIT \$4`,
+ []driver.Value{eventstore.AggregateType("user"), eventstore.AggregateType("org"), "asdf42", uint64(5)},
),
},
res: res{
@@ -819,19 +816,14 @@ func Test_query_events_mocked(t *testing.T) {
},
},
}
+ crdb := NewCRDB(&database.DB{Database: new(testDB)})
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- crdb := &CRDB{
- DB: &database.DB{
- Database: new(testDB),
- },
- AllowOrderByCreationDate: true,
- }
if tt.fields.mock != nil {
crdb.DB.DB = tt.fields.mock.client
}
- err := query(context.Background(), crdb, tt.args.query, tt.args.dest)
+ err := query(context.Background(), crdb, tt.args.query, tt.args.dest, true)
if (err != nil) != tt.res.wantErr {
t.Errorf("query() error = %v, wantErr %v", err, tt.res.wantErr)
}
@@ -856,9 +848,9 @@ func (m *dbMock) expectQuery(t *testing.T, expectedQuery string, args []driver.V
m.mock.ExpectBegin()
query := m.mock.ExpectQuery(expectedQuery).WithArgs(args...)
m.mock.ExpectCommit()
- rows := sqlmock.NewRows([]string{"event_sequence"})
+ rows := sqlmock.NewRows([]string{"sequence"})
for _, event := range events {
- rows = rows.AddRow(event.Sequence)
+ rows = rows.AddRow(event.Seq)
}
query.WillReturnRows(rows).RowsWillBeClosed()
return m
@@ -868,9 +860,9 @@ func (m *dbMock) expectQueryScanErr(t *testing.T, expectedQuery string, args []d
m.mock.ExpectBegin()
query := m.mock.ExpectQuery(expectedQuery).WithArgs(args...)
m.mock.ExpectRollback()
- rows := sqlmock.NewRows([]string{"event_sequence"})
+ rows := sqlmock.NewRows([]string{"sequence"})
for _, event := range events {
- rows = rows.AddRow(event.Sequence)
+ rows = rows.AddRow(event.Seq)
}
query.WillReturnRows(rows).RowsWillBeClosed()
return m
diff --git a/internal/eventstore/repository/sql/types.go b/internal/eventstore/repository/sql/types.go
deleted file mode 100644
index 78ed8f7a6d..0000000000
--- a/internal/eventstore/repository/sql/types.go
+++ /dev/null
@@ -1,49 +0,0 @@
-package sql
-
-import (
- "database/sql/driver"
-)
-
-// Data represents a byte array that may be null.
-// Data implements the sql.Scanner interface
-type Data []byte
-
-// Scan implements the Scanner interface.
-func (data *Data) Scan(value interface{}) error {
- if value == nil {
- *data = nil
- return nil
- }
- *data = Data(value.([]byte))
- return nil
-}
-
-// Value implements the driver Valuer interface.
-func (data Data) Value() (driver.Value, error) {
- if len(data) == 0 {
- return nil, nil
- }
- return []byte(data), nil
-}
-
-// Sequence represents a number that may be null.
-// Sequence implements the sql.Scanner interface
-type Sequence uint64
-
-// Scan implements the Scanner interface.
-func (seq *Sequence) Scan(value interface{}) error {
- if value == nil {
- *seq = 0
- return nil
- }
- *seq = Sequence(value.(int64))
- return nil
-}
-
-// Value implements the driver Valuer interface.
-func (seq Sequence) Value() (driver.Value, error) {
- if seq == 0 {
- return nil, nil
- }
- return int64(seq), nil
-}
diff --git a/internal/eventstore/repository/unique_constraint.go b/internal/eventstore/repository/unique_constraint.go
deleted file mode 100644
index 96d05d1e27..0000000000
--- a/internal/eventstore/repository/unique_constraint.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package repository
-
-// UniqueCheck represents all information about a unique attribute
-type UniqueConstraint struct {
- //UniqueField is the field which should be unique
- UniqueField string
-
- //UniqueType is the type of the unique field
- UniqueType string
-
- //InstanceID represents the instance
- InstanceID string
-
- //Action defines if unique constraint should be added or removed
- Action UniqueConstraintAction
-
- //ErrorMessage is the message key which should be returned if constraint is violated
- ErrorMessage string
-}
-
-type UniqueConstraintAction int32
-
-const (
- UniqueConstraintAdd UniqueConstraintAction = iota
- UniqueConstraintRemoved
- UniqueConstraintInstanceRemoved
-
- uniqueConstraintActionCount
-)
-
-func (f UniqueConstraintAction) Valid() bool {
- return f >= 0 && f < uniqueConstraintActionCount
-}
diff --git a/internal/eventstore/repository/version.go b/internal/eventstore/repository/version.go
deleted file mode 100644
index c534f9a413..0000000000
--- a/internal/eventstore/repository/version.go
+++ /dev/null
@@ -1,20 +0,0 @@
-package repository
-
-import (
- "regexp"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-var versionRegexp = regexp.MustCompile(`^v[0-9]+(\.[0-9]+){0,2}$`)
-
-//Version represents the semver of an aggregate
-type Version string
-
-//Validate checks if the v is semver
-func (v Version) Validate() error {
- if !versionRegexp.MatchString(string(v)) {
- return errors.ThrowPreconditionFailed(nil, "MODEL-luDuS", "version is not semver")
- }
- return nil
-}
diff --git a/internal/eventstore/search_query.go b/internal/eventstore/search_query.go
index 9acf33ea4e..3cdd7f4d81 100644
--- a/internal/eventstore/search_query.go
+++ b/internal/eventstore/search_query.go
@@ -4,61 +4,134 @@ import (
"database/sql"
"time"
- "github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
// SearchQueryBuilder represents the builder for your filter
// if invalid data are set the filter will fail
type SearchQueryBuilder struct {
- columns repository.Columns
- limit uint64
- desc bool
- resourceOwner string
- instanceID string
- editorUser string
- queries []*SearchQuery
- tx *sql.Tx
- allowTimeTravel bool
+ columns Columns
+ limit uint64
+ desc bool
+ resourceOwner string
+ instanceID *string
+ excludedInstanceIDs []string
+ editorUser string
+ queries []*SearchQuery
+ tx *sql.Tx
+ allowTimeTravel bool
+ positionAfter float64
+ awaitOpenTransactions bool
+ creationDateAfter time.Time
+ eventSequenceGreater uint64
+}
+
+func (b *SearchQueryBuilder) GetColumns() Columns {
+ return b.columns
+}
+
+func (b *SearchQueryBuilder) GetLimit() uint64 {
+ return b.limit
+}
+
+func (b *SearchQueryBuilder) GetDesc() bool {
+ return b.desc
+}
+
+func (b *SearchQueryBuilder) GetResourceOwner() string {
+ return b.resourceOwner
+}
+
+func (b *SearchQueryBuilder) GetInstanceID() *string {
+ return b.instanceID
+}
+
+func (b *SearchQueryBuilder) GetEditorUser() string {
+ return b.editorUser
+}
+
+func (b *SearchQueryBuilder) GetQueries() []*SearchQuery {
+ return b.queries
+}
+
+func (b *SearchQueryBuilder) GetTx() *sql.Tx {
+ return b.tx
+}
+
+func (b *SearchQueryBuilder) GetAllowTimeTravel() bool {
+ return b.allowTimeTravel
+}
+
+func (b SearchQueryBuilder) GetPositionAfter() float64 {
+ return b.positionAfter
+}
+
+func (b SearchQueryBuilder) GetAwaitOpenTransactions() bool {
+ return b.awaitOpenTransactions
+}
+
+func (q SearchQueryBuilder) GetExcludedInstanceIDs() []string {
+ return q.excludedInstanceIDs
+}
+
+func (q SearchQueryBuilder) GetEventSequenceGreater() uint64 {
+ return q.eventSequenceGreater
+}
+
+func (q SearchQueryBuilder) GetCreationDateAfter() time.Time {
+ return q.creationDateAfter
}
type SearchQuery struct {
- builder *SearchQueryBuilder
- aggregateTypes []AggregateType
- aggregateIDs []string
- instanceID string
- excludedInstanceIDs []string
- eventSequenceGreater uint64
- eventSequenceLess uint64
- eventTypes []EventType
- eventData map[string]interface{}
- creationDateAfter time.Time
+ builder *SearchQueryBuilder
+ aggregateTypes []AggregateType
+ aggregateIDs []string
+ eventTypes []EventType
+ eventData map[string]interface{}
+}
+
+func (q SearchQuery) GetAggregateTypes() []AggregateType {
+ return q.aggregateTypes
+}
+
+func (q SearchQuery) GetAggregateIDs() []string {
+ return q.aggregateIDs
+}
+
+func (q SearchQuery) GetEventTypes() []EventType {
+ return q.eventTypes
+}
+
+func (q SearchQuery) GetEventData() map[string]interface{} {
+ return q.eventData
}
// Columns defines which fields of the event are needed for the query
-type Columns repository.Columns
+type Columns int8
const (
//ColumnsEvent represents all fields of an event
- ColumnsEvent Columns = repository.ColumnsEvent
+ ColumnsEvent = iota + 1
// ColumnsMaxSequence represents the latest sequence of the filtered events
- ColumnsMaxSequence Columns = repository.ColumnsMaxSequence
+ ColumnsMaxSequence
// ColumnsInstanceIDs represents the instance ids of the filtered events
- ColumnsInstanceIDs Columns = repository.ColumnsInstanceIDs
+ ColumnsInstanceIDs
+
+ columnsCount
)
-// AggregateType is the object name
-type AggregateType repository.AggregateType
-
-// EventType is the description of the change
-type EventType repository.EventType
+func (c Columns) Validate() error {
+ if c <= 0 || c >= columnsCount {
+ return errors.ThrowPreconditionFailed(nil, "REPOS-x8R35", "column out of range")
+ }
+ return nil
+}
// NewSearchQueryBuilder creates a new builder for event filters
// aggregateTypes must contain at least one aggregate type
func NewSearchQueryBuilder(columns Columns) *SearchQueryBuilder {
return &SearchQueryBuilder{
- columns: repository.Columns(columns),
+ columns: columns,
}
}
@@ -69,7 +142,10 @@ func (builder *SearchQueryBuilder) Matches(event Event, existingLen int) (matche
if builder.resourceOwner != "" && event.Aggregate().ResourceOwner != builder.resourceOwner {
return false
}
- if event.Aggregate().InstanceID != "" && builder.instanceID != "" && event.Aggregate().InstanceID != builder.instanceID {
+ if event.Aggregate().InstanceID != "" && builder.instanceID != nil && *builder.instanceID != "" && event.Aggregate().InstanceID != *builder.instanceID {
+ return false
+ }
+ if builder.eventSequenceGreater > 0 && event.Sequence() <= builder.eventSequenceGreater {
return false
}
@@ -86,7 +162,7 @@ func (builder *SearchQueryBuilder) Matches(event Event, existingLen int) (matche
// Columns defines which fields are set
func (builder *SearchQueryBuilder) Columns(columns Columns) *SearchQueryBuilder {
- builder.columns = repository.Columns(columns)
+ builder.columns = columns
return builder
}
@@ -104,7 +180,7 @@ func (builder *SearchQueryBuilder) ResourceOwner(resourceOwner string) *SearchQu
// InstanceID defines the instanceID (system) of the events
func (builder *SearchQueryBuilder) InstanceID(instanceID string) *SearchQueryBuilder {
- builder.instanceID = instanceID
+ builder.instanceID = &instanceID
return builder
}
@@ -138,6 +214,39 @@ func (builder *SearchQueryBuilder) AllowTimeTravel() *SearchQueryBuilder {
return builder
}
+// PositionAfter filters for events which happened after the specified time
+func (builder *SearchQueryBuilder) PositionAfter(position float64) *SearchQueryBuilder {
+ builder.positionAfter = position
+ return builder
+}
+
+// AwaitOpenTransactions filters for events which are older than the oldest transaction of the database
+func (builder *SearchQueryBuilder) AwaitOpenTransactions() *SearchQueryBuilder {
+ builder.awaitOpenTransactions = true
+ return builder
+}
+
+// SequenceGreater filters for events with sequence greater the requested sequence
+func (builder *SearchQueryBuilder) SequenceGreater(sequence uint64) *SearchQueryBuilder {
+ builder.eventSequenceGreater = sequence
+ return builder
+}
+
+// ExcludedInstanceID filters for events not having the given instanceIDs
+func (builder *SearchQueryBuilder) ExcludedInstanceID(instanceIDs ...string) *SearchQueryBuilder {
+ builder.excludedInstanceIDs = instanceIDs
+ return builder
+}
+
+// CreationDateAfter filters for events which happened after the specified time
+func (builder *SearchQueryBuilder) CreationDateAfter(creationDate time.Time) *SearchQueryBuilder {
+ if creationDate.IsZero() || creationDate.Unix() == 0 {
+ return builder
+ }
+ builder.creationDateAfter = creationDate
+ return builder
+}
+
// AddQuery creates a new sub query.
// All fields in the sub query are AND-connected in the storage request.
// Multiple sub queries are OR-connected in the storage request.
@@ -161,42 +270,12 @@ func (query *SearchQuery) AggregateTypes(types ...AggregateType) *SearchQuery {
return query
}
-// SequenceGreater filters for events with sequence greater the requested sequence
-func (query *SearchQuery) SequenceGreater(sequence uint64) *SearchQuery {
- query.eventSequenceGreater = sequence
- return query
-}
-
-// SequenceLess filters for events with sequence less the requested sequence
-func (query *SearchQuery) SequenceLess(sequence uint64) *SearchQuery {
- query.eventSequenceLess = sequence
- return query
-}
-
// AggregateIDs filters for events with the given aggregate id's
func (query *SearchQuery) AggregateIDs(ids ...string) *SearchQuery {
query.aggregateIDs = ids
return query
}
-// InstanceID filters for events with the given instanceID
-func (query *SearchQuery) InstanceID(instanceID string) *SearchQuery {
- query.instanceID = instanceID
- return query
-}
-
-// ExcludedInstanceID filters for events not having the given instanceIDs
-func (query *SearchQuery) ExcludedInstanceID(instanceIDs ...string) *SearchQuery {
- query.excludedInstanceIDs = instanceIDs
- return query
-}
-
-// CreationDateNewer filters for events which happened after the specified time
-func (query *SearchQuery) CreationDateAfter(time time.Time) *SearchQuery {
- query.creationDateAfter = time
- return query
-}
-
// EventTypes filters for events with the given event types
func (query *SearchQuery) EventTypes(types ...EventType) *SearchQuery {
query.eventTypes = types
@@ -216,176 +295,14 @@ func (query *SearchQuery) Builder() *SearchQueryBuilder {
}
func (query *SearchQuery) matches(event Event) bool {
- if query.eventSequenceLess > 0 && event.Sequence() >= query.eventSequenceLess {
- return false
- }
- if query.eventSequenceGreater > 0 && event.Sequence() <= query.eventSequenceGreater {
- return false
- }
if ok := isAggreagteTypes(event.Aggregate(), query.aggregateTypes...); len(query.aggregateTypes) > 0 && !ok {
return false
}
if ok := isAggregateIDs(event.Aggregate(), query.aggregateIDs...); len(query.aggregateIDs) > 0 && !ok {
return false
}
- if event.Aggregate().InstanceID != "" && query.instanceID != "" && event.Aggregate().InstanceID != query.instanceID {
- return false
- }
if ok := isEventTypes(event, query.eventTypes...); len(query.eventTypes) > 0 && !ok {
return false
}
return true
}
-
-func (builder *SearchQueryBuilder) build(instanceID string) (*repository.SearchQuery, error) {
- if builder == nil ||
- len(builder.queries) < 1 ||
- builder.columns.Validate() != nil {
- return nil, errors.ThrowPreconditionFailed(nil, "MODEL-4m9gs", "builder invalid")
- }
- builder.instanceID = instanceID
- filters := make([][]*repository.Filter, len(builder.queries))
-
- for i, query := range builder.queries {
- for _, f := range []func() *repository.Filter{
- query.aggregateTypeFilter,
- query.aggregateIDFilter,
- query.eventTypeFilter,
- query.eventDataFilter,
- query.eventSequenceGreaterFilter,
- query.eventSequenceLessFilter,
- query.instanceIDFilter,
- query.excludedInstanceIDFilter,
- query.creationDateAfterFilter,
- query.builder.resourceOwnerFilter,
- query.builder.instanceIDFilter,
- query.builder.editorUserFilter,
- } {
- if filter := f(); filter != nil {
- if err := filter.Validate(); err != nil {
- return nil, err
- }
- filters[i] = append(filters[i], filter)
- }
- }
-
- }
-
- return &repository.SearchQuery{
- Columns: builder.columns,
- Limit: builder.limit,
- Desc: builder.desc,
- Filters: filters,
- Tx: builder.tx,
- AllowTimeTravel: builder.allowTimeTravel,
- }, nil
-}
-
-func (query *SearchQuery) aggregateIDFilter() *repository.Filter {
- if len(query.aggregateIDs) < 1 {
- return nil
- }
- if len(query.aggregateIDs) == 1 {
- return repository.NewFilter(repository.FieldAggregateID, query.aggregateIDs[0], repository.OperationEquals)
- }
- return repository.NewFilter(repository.FieldAggregateID, database.StringArray(query.aggregateIDs), repository.OperationIn)
-}
-
-func (query *SearchQuery) eventTypeFilter() *repository.Filter {
- if len(query.eventTypes) < 1 {
- return nil
- }
- if len(query.eventTypes) == 1 {
- return repository.NewFilter(repository.FieldEventType, repository.EventType(query.eventTypes[0]), repository.OperationEquals)
- }
- eventTypes := make(database.StringArray, len(query.eventTypes))
- for i, eventType := range query.eventTypes {
- eventTypes[i] = string(eventType)
- }
- return repository.NewFilter(repository.FieldEventType, eventTypes, repository.OperationIn)
-}
-
-func (query *SearchQuery) aggregateTypeFilter() *repository.Filter {
- if len(query.aggregateTypes) < 1 {
- return nil
- }
- if len(query.aggregateTypes) == 1 {
- return repository.NewFilter(repository.FieldAggregateType, repository.AggregateType(query.aggregateTypes[0]), repository.OperationEquals)
- }
- aggregateTypes := make(database.StringArray, len(query.aggregateTypes))
- for i, aggregateType := range query.aggregateTypes {
- aggregateTypes[i] = string(aggregateType)
- }
- return repository.NewFilter(repository.FieldAggregateType, aggregateTypes, repository.OperationIn)
-}
-
-func (query *SearchQuery) eventSequenceGreaterFilter() *repository.Filter {
- if query.eventSequenceGreater == 0 {
- return nil
- }
- sortOrder := repository.OperationGreater
- if query.builder.desc {
- sortOrder = repository.OperationLess
- }
- return repository.NewFilter(repository.FieldSequence, query.eventSequenceGreater, sortOrder)
-}
-
-func (query *SearchQuery) eventSequenceLessFilter() *repository.Filter {
- if query.eventSequenceLess == 0 {
- return nil
- }
- sortOrder := repository.OperationLess
- if query.builder.desc {
- sortOrder = repository.OperationGreater
- }
- return repository.NewFilter(repository.FieldSequence, query.eventSequenceLess, sortOrder)
-}
-
-func (query *SearchQuery) instanceIDFilter() *repository.Filter {
- if query.instanceID == "" {
- return nil
- }
- return repository.NewFilter(repository.FieldInstanceID, query.instanceID, repository.OperationEquals)
-}
-
-func (query *SearchQuery) excludedInstanceIDFilter() *repository.Filter {
- if len(query.excludedInstanceIDs) == 0 {
- return nil
- }
- return repository.NewFilter(repository.FieldInstanceID, database.StringArray(query.excludedInstanceIDs), repository.OperationNotIn)
-}
-
-func (builder *SearchQueryBuilder) resourceOwnerFilter() *repository.Filter {
- if builder.resourceOwner == "" {
- return nil
- }
- return repository.NewFilter(repository.FieldResourceOwner, builder.resourceOwner, repository.OperationEquals)
-}
-
-func (builder *SearchQueryBuilder) instanceIDFilter() *repository.Filter {
- if builder.instanceID == "" {
- return nil
- }
- return repository.NewFilter(repository.FieldInstanceID, builder.instanceID, repository.OperationEquals)
-}
-
-func (builder *SearchQueryBuilder) editorUserFilter() *repository.Filter {
- if builder.editorUser == "" {
- return nil
- }
- return repository.NewFilter(repository.FieldEditorUser, builder.editorUser, repository.OperationEquals)
-}
-
-func (query *SearchQuery) creationDateAfterFilter() *repository.Filter {
- if query.creationDateAfter.IsZero() {
- return nil
- }
- return repository.NewFilter(repository.FieldCreationDate, query.creationDateAfter, repository.OperationGreater)
-}
-
-func (query *SearchQuery) eventDataFilter() *repository.Filter {
- if len(query.eventData) == 0 {
- return nil
- }
- return repository.NewFilter(repository.FieldEventData, query.eventData, repository.OperationJSONContains)
-}
diff --git a/internal/eventstore/search_query_test.go b/internal/eventstore/search_query_test.go
index 62153161ba..a125c515b8 100644
--- a/internal/eventstore/search_query_test.go
+++ b/internal/eventstore/search_query_test.go
@@ -1,17 +1,27 @@
package eventstore
import (
- "math"
"reflect"
"testing"
- "time"
-
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
-func testAddQuery(queryFuncs ...func(*SearchQuery) *SearchQuery) func(*SearchQueryBuilder) *SearchQueryBuilder {
+func testSetQuery(queryFuncs ...func(*SearchQueryBuilder) *SearchQueryBuilder) func(*SearchQueryBuilder) *SearchQueryBuilder {
+ return func(builder *SearchQueryBuilder) *SearchQueryBuilder {
+ for _, queryFunc := range queryFuncs {
+ queryFunc(builder)
+ }
+ return builder
+ }
+}
+
+func testSetSequenceGreater(sequence uint64) func(*SearchQueryBuilder) *SearchQueryBuilder {
+ return func(builder *SearchQueryBuilder) *SearchQueryBuilder {
+ builder = builder.SequenceGreater(sequence)
+ return builder
+ }
+}
+
+func testAddSubQuery(queryFuncs ...func(*SearchQuery) *SearchQuery) func(*SearchQueryBuilder) *SearchQueryBuilder {
return func(builder *SearchQueryBuilder) *SearchQueryBuilder {
query := builder.AddQuery()
for _, queryFunc := range queryFuncs {
@@ -52,20 +62,6 @@ func testSetAggregateTypes(types ...AggregateType) func(*SearchQuery) *SearchQue
}
}
-func testSetSequenceGreater(sequence uint64) func(*SearchQuery) *SearchQuery {
- return func(query *SearchQuery) *SearchQuery {
- query = query.SequenceGreater(sequence)
- return query
- }
-}
-
-func testSetSequenceLess(sequence uint64) func(*SearchQuery) *SearchQuery {
- return func(query *SearchQuery) *SearchQuery {
- query = query.SequenceLess(sequence)
- return query
- }
-}
-
func testSetAggregateIDs(aggregateIDs ...string) func(*SearchQuery) *SearchQuery {
return func(query *SearchQuery) *SearchQuery {
query = query.AggregateIDs(aggregateIDs...)
@@ -87,13 +83,6 @@ func testSetResourceOwner(resourceOwner string) func(*SearchQueryBuilder) *Searc
}
}
-func testSetCreationDateAfter(date time.Time) func(*SearchQuery) *SearchQuery {
- return func(query *SearchQuery) *SearchQuery {
- query = query.CreationDateAfter(date)
- return query
- }
-}
-
func testSetSortOrder(asc bool) func(*SearchQueryBuilder) *SearchQueryBuilder {
return func(query *SearchQueryBuilder) *SearchQueryBuilder {
if asc {
@@ -121,16 +110,16 @@ func TestSearchQuerybuilderSetters(t *testing.T) {
columns: ColumnsEvent,
},
res: &SearchQueryBuilder{
- columns: repository.Columns(ColumnsEvent),
+ columns: Columns(ColumnsEvent),
},
},
{
name: "set columns",
args: args{
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testSetColumns(repository.ColumnsMaxSequence)},
+ setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testSetColumns(ColumnsMaxSequence)},
},
res: &SearchQueryBuilder{
- columns: repository.ColumnsMaxSequence,
+ columns: ColumnsMaxSequence,
},
},
{
@@ -145,33 +134,18 @@ func TestSearchQuerybuilderSetters(t *testing.T) {
{
name: "set sequence greater",
args: args{
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddQuery(testSetSequenceGreater(90))},
- },
- res: &SearchQueryBuilder{
- queries: []*SearchQuery{
- {
- eventSequenceGreater: 90,
- },
+ setters: []func(b *SearchQueryBuilder) *SearchQueryBuilder{
+ testSetQuery(testSetSequenceGreater(90)),
},
},
- },
- {
- name: "set sequence less",
- args: args{
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddQuery(testSetSequenceLess(90))},
- },
res: &SearchQueryBuilder{
- queries: []*SearchQuery{
- {
- eventSequenceLess: 90,
- },
- },
+ eventSequenceGreater: 90,
},
},
{
name: "set aggregateIDs",
args: args{
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddQuery(testSetAggregateIDs("1235", "09824"))},
+ setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddSubQuery(testSetAggregateIDs("1235", "09824"))},
},
res: &SearchQueryBuilder{
queries: []*SearchQuery{
@@ -184,7 +158,7 @@ func TestSearchQuerybuilderSetters(t *testing.T) {
{
name: "set eventTypes",
args: args{
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddQuery(testSetEventTypes("user.created", "user.updated"))},
+ setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddSubQuery(testSetEventTypes("user.created", "user.updated"))},
},
res: &SearchQueryBuilder{
queries: []*SearchQuery{
@@ -206,7 +180,7 @@ func TestSearchQuerybuilderSetters(t *testing.T) {
{
name: "default search query",
args: args{
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddQuery(testSetAggregateTypes("user"), testSetAggregateIDs("1235", "024")), testSetSortOrder(false)},
+ setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{testAddSubQuery(testSetAggregateTypes("user"), testSetAggregateIDs("1235", "024")), testSetSortOrder(false)},
},
res: &SearchQueryBuilder{
desc: true,
@@ -231,496 +205,6 @@ func TestSearchQuerybuilderSetters(t *testing.T) {
}
}
-func TestSearchQuerybuilderBuild(t *testing.T) {
- testNow := time.Now()
- type args struct {
- columns Columns
- setters []func(*SearchQueryBuilder) *SearchQueryBuilder
- instanceID string
- }
- type res struct {
- isErr func(err error) bool
- query *repository.SearchQuery
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "no aggregate types",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{},
- },
- res: res{
- isErr: errors.IsPreconditionFailed,
- query: nil,
- },
- },
- {
- name: "invalid column (too low)",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testSetColumns(Columns(-1)),
- testAddQuery(testSetAggregateTypes("user")),
- },
- },
- res: res{
- isErr: errors.IsPreconditionFailed,
- },
- },
- {
- name: "invalid column (too high)",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testSetColumns(math.MaxInt32),
- testAddQuery(testSetAggregateTypes("uesr")),
- },
- },
- res: res{
- isErr: errors.IsPreconditionFailed,
- },
- },
- {
- name: "filter aggregate type",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(testSetAggregateTypes("user")),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate types",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(testSetAggregateTypes("user", "org")),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, database.StringArray{"user", "org"}, repository.OperationIn),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type, limit, desc",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testSetLimit(5),
- testSetSortOrder(false),
- testAddQuery(
- testSetSequenceGreater(100),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: true,
- Limit: 5,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldSequence, uint64(100), repository.OperationLess),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type, limit, asc",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testSetLimit(5),
- testSetSortOrder(true),
- testAddQuery(
- testSetSequenceGreater(100),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 5,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldSequence, uint64(100), repository.OperationGreater),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type, limit, desc, max event sequence cols",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testSetLimit(5),
- testSetSortOrder(false),
- testSetColumns(repository.ColumnsMaxSequence),
- testAddQuery(
- testSetSequenceGreater(100),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsMaxSequence,
- Desc: true,
- Limit: 5,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldSequence, uint64(100), repository.OperationLess),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and aggregate id",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetAggregateIDs("1234"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldAggregateID, "1234", repository.OperationEquals),
- },
- },
- },
- },
- },
- {
- name: "filter multiple aggregate type and aggregate id",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetAggregateIDs("1234"),
- testOr(
- testSetAggregateTypes("org"),
- testSetAggregateIDs("izu"),
- ),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldAggregateID, "1234", repository.OperationEquals),
- },
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("org"), repository.OperationEquals),
- repository.NewFilter(repository.FieldAggregateID, "izu", repository.OperationEquals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and aggregate ids",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetAggregateIDs("1234", "0815"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldAggregateID, database.StringArray{"1234", "0815"}, repository.OperationIn),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and sequence greater",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetSequenceGreater(8),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldSequence, uint64(8), repository.OperationGreater),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and event type",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetEventTypes("user.created"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldEventType, repository.EventType("user.created"), repository.OperationEquals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and event types",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetEventTypes("user.created", "user.changed"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldEventType, database.StringArray{"user.created", "user.changed"}, repository.OperationIn),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type resource owner",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testSetResourceOwner("hodor"),
- testAddQuery(
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldResourceOwner, "hodor", repository.OperationEquals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and sequence between",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetSequenceGreater(8),
- testSetSequenceLess(16),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldSequence, uint64(8), repository.OperationGreater),
- repository.NewFilter(repository.FieldSequence, uint64(16), repository.OperationLess),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and instanceID",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- ),
- },
- instanceID: "instanceID",
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldInstanceID, "instanceID", repository.OperationEquals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type, instanceID and creation date after",
- args: args{
- columns: ColumnsEvent,
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetCreationDateAfter(testNow),
- ),
- },
- instanceID: "instanceID",
- },
- res: res{
- isErr: nil,
- query: &repository.SearchQuery{
- Columns: repository.ColumnsEvent,
- Desc: false,
- Limit: 0,
- Filters: [][]*repository.Filter{
- {
- repository.NewFilter(repository.FieldAggregateType, repository.AggregateType("user"), repository.OperationEquals),
- repository.NewFilter(repository.FieldCreationDate, testNow, repository.OperationGreater),
- repository.NewFilter(repository.FieldInstanceID, "instanceID", repository.OperationEquals),
- },
- },
- },
- },
- },
- {
- name: "column invalid",
- args: args{
- columns: Columns(-1),
- setters: []func(*SearchQueryBuilder) *SearchQueryBuilder{
- testAddQuery(
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: errors.IsPreconditionFailed,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- builder := NewSearchQueryBuilder(tt.args.columns)
- for _, f := range tt.args.setters {
- builder = f(builder)
- }
- query, err := builder.build(tt.args.instanceID)
- if tt.res.isErr != nil && !tt.res.isErr(err) {
- t.Errorf("wrong error(%T): %v", err, err)
- return
- }
- if err != nil && tt.res.isErr == nil {
- t.Errorf("no error expected: %v", err)
- return
- }
-
- assertRepoQuery(t, tt.res.query, query)
- })
- }
-}
-
func assertBuilder(t *testing.T, want, got *SearchQueryBuilder) {
t.Helper()
@@ -757,62 +241,14 @@ func assertQuery(t *testing.T, i int, want, got *SearchQuery) {
if !reflect.DeepEqual(got.eventData, want.eventData) {
t.Errorf("wrong eventData in query %d : got: %v want: %v", i, got.eventData, want.eventData)
}
- if got.eventSequenceLess != want.eventSequenceLess {
- t.Errorf("wrong eventSequenceLess in query %d : got: %v want: %v", i, got.eventSequenceLess, want.eventSequenceLess)
- }
- if got.eventSequenceGreater != want.eventSequenceGreater {
- t.Errorf("wrong eventSequenceGreater in query %d : got: %v want: %v", i, got.eventSequenceGreater, want.eventSequenceGreater)
- }
+ // if got.eventSequenceGreater != want.eventSequenceGreater {
+ // t.Errorf("wrong eventSequenceGreater in query %d : got: %v want: %v", i, got.eventSequenceGreater, want.eventSequenceGreater)
+ // }
if !reflect.DeepEqual(got.eventTypes, want.eventTypes) {
t.Errorf("wrong eventTypes in query %d : got: %v want: %v", i, got.eventTypes, want.eventTypes)
}
}
-func assertRepoQuery(t *testing.T, want, got *repository.SearchQuery) {
- t.Helper()
-
- if want == nil && got == nil {
- return
- }
-
- if !reflect.DeepEqual(got.Columns, want.Columns) {
- t.Errorf("wrong columns in query: got: %v want: %v", got.Columns, want.Columns)
- }
- if got.Desc != want.Desc {
- t.Errorf("wrong desc in query: got: %v want: %v", got.Desc, want.Desc)
- }
- if got.Limit != want.Limit {
- t.Errorf("wrong limit in query: got: %v want: %v", got.Limit, want.Limit)
- }
-
- if len(got.Filters) != len(want.Filters) {
- t.Errorf("wrong length of filters: got: %v want: %v", len(got.Filters), len(want.Filters))
- }
-
- for filterIdx, filter := range got.Filters {
- if len(got.Filters) != len(want.Filters) {
- t.Errorf("wrong length of subfilters: got: %v want: %v", len(filter), len(want.Filters[filterIdx]))
- }
- for subFilterIdx, f := range filter {
- assertFilters(t, subFilterIdx, want.Filters[filterIdx][subFilterIdx], f)
- }
- }
-}
-
-func assertFilters(t *testing.T, i int, want, got *repository.Filter) {
- t.Helper()
-
- if want.Field != got.Field {
- t.Errorf("wrong field in filter %d : got: %v want: %v", i, got.Field, want.Field)
- }
- if want.Operation != got.Operation {
- t.Errorf("wrong operation in filter %d : got: %v want: %v", i, got.Operation, want.Operation)
- }
- if !reflect.DeepEqual(want.Value, got.Value) {
- t.Errorf("wrong value in filter %d : got: %v want: %v", i, got.Value, want.Value)
- }
-}
-
func TestSearchQuery_matches(t *testing.T) {
type args struct {
event Event
@@ -823,27 +259,11 @@ func TestSearchQuery_matches(t *testing.T) {
event Event
want bool
}{
- {
- name: "sequence too low",
- query: NewSearchQueryBuilder(ColumnsEvent).AddQuery().SequenceLess(10),
- event: &BaseEvent{
- sequence: 10,
- },
- want: false,
- },
- {
- name: "sequence too high",
- query: NewSearchQueryBuilder(ColumnsEvent).AddQuery().SequenceGreater(60),
- event: &BaseEvent{
- sequence: 60,
- },
- want: false,
- },
{
name: "wrong aggregate type",
query: NewSearchQueryBuilder(ColumnsEvent).AddQuery().AggregateTypes("searched"),
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
Type: "found",
},
},
@@ -853,7 +273,7 @@ func TestSearchQuery_matches(t *testing.T) {
name: "wrong aggregate id",
query: NewSearchQueryBuilder(ColumnsEvent).AddQuery().AggregateIDs("1", "10", "100"),
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
ID: "2",
},
},
@@ -864,16 +284,20 @@ func TestSearchQuery_matches(t *testing.T) {
query: NewSearchQueryBuilder(ColumnsEvent).AddQuery().EventTypes("event.searched.type"),
event: &BaseEvent{
EventType: "event.actual.type",
+ Agg: &Aggregate{},
},
want: false,
},
{
name: "matching",
- query: NewSearchQueryBuilder(ColumnsEvent).AddQuery().
- SequenceLess(100).SequenceGreater(50).AggregateIDs("2").AggregateTypes("actual").EventTypes("event.actual.type"),
+ query: NewSearchQueryBuilder(ColumnsEvent).
+ AddQuery().
+ AggregateIDs("2").
+ AggregateTypes("actual").
+ EventTypes("event.actual.type"),
event: &BaseEvent{
- sequence: 55,
- aggregate: Aggregate{
+ Seq: 55,
+ Agg: &Aggregate{
ID: "2",
Type: "actual",
},
@@ -885,8 +309,8 @@ func TestSearchQuery_matches(t *testing.T) {
name: "matching empty query",
query: NewSearchQueryBuilder(ColumnsEvent).AddQuery(),
event: &BaseEvent{
- sequence: 55,
- aggregate: Aggregate{
+ Seq: 55,
+ Agg: &Aggregate{
ID: "2",
Type: "actual",
},
@@ -898,12 +322,10 @@ func TestSearchQuery_matches(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
query := &SearchQuery{
- aggregateTypes: tt.query.aggregateTypes,
- aggregateIDs: tt.query.aggregateIDs,
- eventSequenceGreater: tt.query.eventSequenceGreater,
- eventSequenceLess: tt.query.eventSequenceLess,
- eventTypes: tt.query.eventTypes,
- eventData: tt.query.eventData,
+ aggregateTypes: tt.query.aggregateTypes,
+ aggregateIDs: tt.query.aggregateIDs,
+ eventTypes: tt.query.eventTypes,
+ eventData: tt.query.eventData,
}
if got := query.matches(tt.event); got != tt.want {
t.Errorf("SearchQuery.matches() = %v, want %v", got, tt.want)
@@ -923,6 +345,19 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
args args
want bool
}{
+ {
+ name: "sequence too high",
+ builder: NewSearchQueryBuilder(ColumnsEvent).SequenceGreater(60),
+ args: args{
+ event: &BaseEvent{
+ Agg: &Aggregate{
+ InstanceID: "instance",
+ },
+ Seq: 60,
+ },
+ },
+ want: false,
+ },
{
name: "limit exeeded",
builder: NewSearchQueryBuilder(ColumnsEvent).Limit(100),
@@ -937,7 +372,7 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
builder: NewSearchQueryBuilder(ColumnsEvent).ResourceOwner("query"),
args: args{
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
ResourceOwner: "ro",
},
},
@@ -950,7 +385,7 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
builder: NewSearchQueryBuilder(ColumnsEvent).InstanceID("instance"),
args: args{
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
InstanceID: "different instance",
},
},
@@ -959,14 +394,12 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
want: false,
},
{
- name: "query failed",
- builder: NewSearchQueryBuilder(ColumnsEvent).
- AddQuery().
- SequenceGreater(1000).
- Builder(),
+ name: "query failed",
+ builder: NewSearchQueryBuilder(ColumnsEvent).SequenceGreater(1000),
args: args{
event: &BaseEvent{
- sequence: 999,
+ Seq: 999,
+ Agg: &Aggregate{},
},
existingLen: 0,
},
@@ -978,16 +411,14 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
Limit(1000).
ResourceOwner("ro").
InstanceID("instance").
- AddQuery().
- SequenceGreater(1000).
- Builder(),
+ SequenceGreater(1000),
args: args{
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
ResourceOwner: "ro",
InstanceID: "instance",
},
- sequence: 1001,
+ Seq: 1001,
},
existingLen: 999,
},
@@ -998,11 +429,11 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
builder: NewSearchQueryBuilder(ColumnsEvent),
args: args{
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
ResourceOwner: "ro",
InstanceID: "instance",
},
- sequence: 1001,
+ Seq: 1001,
},
existingLen: 999,
},
@@ -1013,10 +444,10 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
builder: NewSearchQueryBuilder(ColumnsEvent),
args: args{
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
ResourceOwner: "ro",
},
- sequence: 1001,
+ Seq: 1001,
},
existingLen: 999,
},
@@ -1027,10 +458,10 @@ func TestSearchQueryBuilder_Matches(t *testing.T) {
builder: NewSearchQueryBuilder(ColumnsEvent),
args: args{
event: &BaseEvent{
- aggregate: Aggregate{
+ Agg: &Aggregate{
InstanceID: "instance",
},
- sequence: 1001,
+ Seq: 1001,
},
existingLen: 999,
},
diff --git a/internal/eventstore/subscription.go b/internal/eventstore/subscription.go
index 5348d89f21..c76c81df19 100644
--- a/internal/eventstore/subscription.go
+++ b/internal/eventstore/subscription.go
@@ -3,8 +3,7 @@ package eventstore
import (
"sync"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/logging"
)
var (
@@ -17,7 +16,7 @@ type Subscription struct {
types map[AggregateType][]EventType
}
-//SubscribeAggregates subscribes for all events on the given aggregates
+// SubscribeAggregates subscribes for all events on the given aggregates
func SubscribeAggregates(eventQueue chan Event, aggregates ...AggregateType) *Subscription {
types := make(map[AggregateType][]EventType, len(aggregates))
for _, aggregate := range aggregates {
@@ -38,10 +37,9 @@ func SubscribeAggregates(eventQueue chan Event, aggregates ...AggregateType) *Su
return sub
}
-//SubscribeEventTypes subscribes for the given event types
+// SubscribeEventTypes subscribes for the given event types
// if no event types are provided the subscription is for all events of the aggregate
func SubscribeEventTypes(eventQueue chan Event, types map[AggregateType][]EventType) *Subscription {
- aggregates := make([]AggregateType, len(types))
sub := &Subscription{
Events: eventQueue,
types: types,
@@ -50,15 +48,14 @@ func SubscribeEventTypes(eventQueue chan Event, types map[AggregateType][]EventT
subsMutext.Lock()
defer subsMutext.Unlock()
- for _, aggregate := range aggregates {
+ for aggregate := range types {
subscriptions[aggregate] = append(subscriptions[aggregate], sub)
}
return sub
}
-func notify(events []Event) {
- go v1.Notify(MapEventsToV1Events(events))
+func (es *Eventstore) notify(events []Event) {
subsMutext.Lock()
defer subsMutext.Unlock()
for _, event := range events {
@@ -76,7 +73,11 @@ func notify(events []Event) {
//subscription for certain events
for _, eventType := range eventTypes {
if event.Type() == eventType {
- sub.Events <- event
+ select {
+ case sub.Events <- event:
+ default:
+ logging.Debug("unable to push event")
+ }
break
}
}
@@ -105,26 +106,3 @@ func (s *Subscription) Unsubscribe() {
close(s.Events)
}
}
-
-func MapEventsToV1Events(events []Event) []*models.Event {
- v1Events := make([]*models.Event, len(events))
- for i, event := range events {
- v1Events[i] = mapEventToV1Event(event)
- }
- return v1Events
-}
-
-func mapEventToV1Event(event Event) *models.Event {
- return &models.Event{
- Sequence: event.Sequence(),
- CreationDate: event.CreationDate(),
- Type: models.EventType(event.Type()),
- AggregateType: models.AggregateType(event.Aggregate().Type),
- AggregateID: event.Aggregate().ID,
- ResourceOwner: event.Aggregate().ResourceOwner,
- InstanceID: event.Aggregate().InstanceID,
- EditorService: event.EditorService(),
- EditorUser: event.EditorUser(),
- Data: event.DataAsBytes(),
- }
-}
diff --git a/internal/eventstore/unique_constraint.go b/internal/eventstore/unique_constraint.go
index 4c329c4569..4486e19e5d 100644
--- a/internal/eventstore/unique_constraint.go
+++ b/internal/eventstore/unique_constraint.go
@@ -1,31 +1,37 @@
package eventstore
-type EventUniqueConstraint struct {
+type UniqueConstraint struct {
// UniqueType is the table name for the unique constraint
UniqueType string
- //UniqueField is the unique key
+ // UniqueField is the unique key
UniqueField string
- //Action defines if unique constraint should be added or removed
+ // Action defines if unique constraint should be added or removed
Action UniqueConstraintAction
- //ErrorMessage defines the translation file key for the error message
+ // ErrorMessage defines the translation file key for the error message
ErrorMessage string
- //IsGlobal defines if the unique constraint is globally unique or just within a single instance
+ // IsGlobal defines if the unique constraint is globally unique or just within a single instance
IsGlobal bool
}
-type UniqueConstraintAction int32
+type UniqueConstraintAction int8
const (
UniqueConstraintAdd UniqueConstraintAction = iota
UniqueConstraintRemove
UniqueConstraintInstanceRemove
+
+ uniqueConstraintActionCount
)
+func (f UniqueConstraintAction) Valid() bool {
+ return f >= 0 && f < uniqueConstraintActionCount
+}
+
func NewAddEventUniqueConstraint(
uniqueType,
uniqueField,
- errMessage string) *EventUniqueConstraint {
- return &EventUniqueConstraint{
+ errMessage string) *UniqueConstraint {
+ return &UniqueConstraint{
UniqueType: uniqueType,
UniqueField: uniqueField,
ErrorMessage: errMessage,
@@ -33,27 +39,27 @@ func NewAddEventUniqueConstraint(
}
}
-func NewRemoveEventUniqueConstraint(
+func NewRemoveUniqueConstraint(
uniqueType,
- uniqueField string) *EventUniqueConstraint {
- return &EventUniqueConstraint{
+ uniqueField string) *UniqueConstraint {
+ return &UniqueConstraint{
UniqueType: uniqueType,
UniqueField: uniqueField,
Action: UniqueConstraintRemove,
}
}
-func NewRemoveInstanceUniqueConstraints() *EventUniqueConstraint {
- return &EventUniqueConstraint{
+func NewRemoveInstanceUniqueConstraints() *UniqueConstraint {
+ return &UniqueConstraint{
Action: UniqueConstraintInstanceRemove,
}
}
-func NewAddGlobalEventUniqueConstraint(
+func NewAddGlobalUniqueConstraint(
uniqueType,
uniqueField,
- errMessage string) *EventUniqueConstraint {
- return &EventUniqueConstraint{
+ errMessage string) *UniqueConstraint {
+ return &UniqueConstraint{
UniqueType: uniqueType,
UniqueField: uniqueField,
ErrorMessage: errMessage,
@@ -62,10 +68,10 @@ func NewAddGlobalEventUniqueConstraint(
}
}
-func NewRemoveGlobalEventUniqueConstraint(
+func NewRemoveGlobalUniqueConstraint(
uniqueType,
- uniqueField string) *EventUniqueConstraint {
- return &EventUniqueConstraint{
+ uniqueField string) *UniqueConstraint {
+ return &UniqueConstraint{
UniqueType: uniqueType,
UniqueField: uniqueField,
IsGlobal: true,
diff --git a/internal/eventstore/v1/eventstore.go b/internal/eventstore/v1/eventstore.go
deleted file mode 100644
index 5c350d7fee..0000000000
--- a/internal/eventstore/v1/eventstore.go
+++ /dev/null
@@ -1,51 +0,0 @@
-package v1
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore/v1/internal/repository"
- z_sql "github.com/zitadel/zitadel/internal/eventstore/v1/internal/repository/sql"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/telemetry/tracing"
-)
-
-type Eventstore interface {
- Health(ctx context.Context) error
- FilterEvents(ctx context.Context, searchQuery *models.SearchQuery) (events []*models.Event, err error)
- Subscribe(aggregates ...models.AggregateType) *Subscription
- InstanceIDs(ctx context.Context, searchQuery *models.SearchQuery) ([]string, error)
-}
-
-var _ Eventstore = (*eventstore)(nil)
-
-type eventstore struct {
- repo repository.Repository
-}
-
-func Start(db *database.DB, allowOrderByCreationDate bool) (Eventstore, error) {
- return &eventstore{
- repo: z_sql.Start(db, allowOrderByCreationDate),
- }, nil
-}
-
-func (es *eventstore) FilterEvents(ctx context.Context, searchQuery *models.SearchQuery) (_ []*models.Event, err error) {
- ctx, span := tracing.NewSpan(ctx)
- defer func() { span.EndWithError(err) }()
-
- if err := searchQuery.Validate(); err != nil {
- return nil, err
- }
- return es.repo.Filter(ctx, models.FactoryFromSearchQuery(searchQuery))
-}
-
-func (es *eventstore) Health(ctx context.Context) error {
- return es.repo.Health(ctx)
-}
-
-func (es *eventstore) InstanceIDs(ctx context.Context, searchQuery *models.SearchQuery) ([]string, error) {
- if err := searchQuery.Validate(); err != nil {
- return nil, err
- }
- return es.repo.InstanceIDs(ctx, models.FactoryFromSearchQuery(searchQuery))
-}
diff --git a/internal/eventstore/v1/gen_mock.go b/internal/eventstore/v1/gen_mock.go
deleted file mode 100644
index 7c86dd52f4..0000000000
--- a/internal/eventstore/v1/gen_mock.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package v1
-
-//go:generate mockgen -package mock -destination ./mock/eventstore.mock.go github.com/zitadel/zitadel/internal/eventstore Eventstore
diff --git a/internal/eventstore/v1/internal/repository/gen_mock.go b/internal/eventstore/v1/internal/repository/gen_mock.go
deleted file mode 100644
index 2500cfe8bd..0000000000
--- a/internal/eventstore/v1/internal/repository/gen_mock.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package repository
-
-//go:generate mockgen -package mock -destination ./mock/repository.mock.go github.com/zitadel/zitadel/internal/eventstore/internal/repository Repository
diff --git a/internal/eventstore/v1/internal/repository/mock/repository.go b/internal/eventstore/v1/internal/repository/mock/repository.go
deleted file mode 100644
index 8574eb3009..0000000000
--- a/internal/eventstore/v1/internal/repository/mock/repository.go
+++ /dev/null
@@ -1,34 +0,0 @@
-package mock
-
-import (
- "context"
- "testing"
-
- gomock "github.com/golang/mock/gomock"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-func NewMock(t *testing.T) *MockRepository {
- return NewMockRepository(gomock.NewController(t))
-}
-
-func (m *MockRepository) ExpectFilter(query *models.SearchQuery, eventAmount int) *MockRepository {
- events := make([]*models.Event, eventAmount)
- m.EXPECT().Filter(context.Background(), query).Return(events, nil).MaxTimes(1)
- return m
-}
-
-func (m *MockRepository) ExpectFilterFail(query *models.SearchQuery, err error) *MockRepository {
- m.EXPECT().Filter(context.Background(), query).Return(nil, err).MaxTimes(1)
- return m
-}
-
-func (m *MockRepository) ExpectPush(aggregates ...*models.Aggregate) *MockRepository {
- m.EXPECT().PushAggregates(context.Background(), aggregates).Return(nil).MaxTimes(1)
- return m
-}
-
-func (m *MockRepository) ExpectPushError(err error, aggregates ...*models.Aggregate) *MockRepository {
- m.EXPECT().PushAggregates(context.Background(), aggregates).Return(err).MaxTimes(1)
- return m
-}
diff --git a/internal/eventstore/v1/internal/repository/mock/repository.mock.go b/internal/eventstore/v1/internal/repository/mock/repository.mock.go
deleted file mode 100644
index 0e5bd031c4..0000000000
--- a/internal/eventstore/v1/internal/repository/mock/repository.mock.go
+++ /dev/null
@@ -1,98 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: github.com/zitadel/zitadel/internal/eventstore/internal/repository (interfaces: Repository)
-
-// Package mock is a generated GoMock package.
-package mock
-
-import (
- context "context"
- models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- gomock "github.com/golang/mock/gomock"
- reflect "reflect"
-)
-
-// MockRepository is a mock of Repository interface
-type MockRepository struct {
- ctrl *gomock.Controller
- recorder *MockRepositoryMockRecorder
-}
-
-// MockRepositoryMockRecorder is the mock recorder for MockRepository
-type MockRepositoryMockRecorder struct {
- mock *MockRepository
-}
-
-// NewMockRepository creates a new mock instance
-func NewMockRepository(ctrl *gomock.Controller) *MockRepository {
- mock := &MockRepository{ctrl: ctrl}
- mock.recorder = &MockRepositoryMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use
-func (m *MockRepository) EXPECT() *MockRepositoryMockRecorder {
- return m.recorder
-}
-
-// Filter mocks base method
-func (m *MockRepository) Filter(arg0 context.Context, arg1 *models.SearchQueryFactory) ([]*models.Event, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Filter", arg0, arg1)
- ret0, _ := ret[0].([]*models.Event)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// Filter indicates an expected call of Filter
-func (mr *MockRepositoryMockRecorder) Filter(arg0, arg1 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Filter", reflect.TypeOf((*MockRepository)(nil).Filter), arg0, arg1)
-}
-
-// Health mocks base method
-func (m *MockRepository) Health(arg0 context.Context) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Health", arg0)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Health indicates an expected call of Health
-func (mr *MockRepositoryMockRecorder) Health(arg0 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockRepository)(nil).Health), arg0)
-}
-
-// LatestSequence mocks base method
-func (m *MockRepository) LatestSequence(arg0 context.Context, arg1 *models.SearchQueryFactory) (uint64, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "LatestSequence", arg0, arg1)
- ret0, _ := ret[0].(uint64)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// LatestSequence indicates an expected call of LatestSequence
-func (mr *MockRepositoryMockRecorder) LatestSequence(arg0, arg1 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "LatestSequence", reflect.TypeOf((*MockRepository)(nil).LatestSequence), arg0, arg1)
-}
-
-// PushAggregates mocks base method
-func (m *MockRepository) PushAggregates(arg0 context.Context, arg1 ...*models.Aggregate) error {
- m.ctrl.T.Helper()
- varargs := []interface{}{arg0}
- for _, a := range arg1 {
- varargs = append(varargs, a)
- }
- ret := m.ctrl.Call(m, "PushAggregates", varargs...)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// PushAggregates indicates an expected call of PushAggregates
-func (mr *MockRepositoryMockRecorder) PushAggregates(arg0 interface{}, arg1 ...interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- varargs := append([]interface{}{arg0}, arg1...)
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PushAggregates", reflect.TypeOf((*MockRepository)(nil).PushAggregates), varargs...)
-}
diff --git a/internal/eventstore/v1/internal/repository/repository.go b/internal/eventstore/v1/internal/repository/repository.go
deleted file mode 100644
index 8f7d1e4697..0000000000
--- a/internal/eventstore/v1/internal/repository/repository.go
+++ /dev/null
@@ -1,18 +0,0 @@
-package repository
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-type Repository interface {
- Health(ctx context.Context) error
-
- // Filter returns all events matching the given search query
- Filter(ctx context.Context, searchQuery *models.SearchQueryFactory) (events []*models.Event, err error)
- //LatestSequence returns the latest sequence found by the search query
- LatestSequence(ctx context.Context, queryFactory *models.SearchQueryFactory) (uint64, error)
- //InstanceIDs returns the instance ids found by the search query
- InstanceIDs(ctx context.Context, queryFactory *models.SearchQueryFactory) ([]string, error)
-}
diff --git a/internal/eventstore/v1/internal/repository/sql/config.go b/internal/eventstore/v1/internal/repository/sql/config.go
deleted file mode 100644
index 5ea34e6e40..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/config.go
+++ /dev/null
@@ -1,12 +0,0 @@
-package sql
-
-import (
- "github.com/zitadel/zitadel/internal/database"
-)
-
-func Start(client *database.DB, allowOrderByCreationDate bool) *SQL {
- return &SQL{
- client: client,
- allowOrderByCreationDate: allowOrderByCreationDate,
- }
-}
diff --git a/internal/eventstore/v1/internal/repository/sql/db_mock_test.go b/internal/eventstore/v1/internal/repository/sql/db_mock_test.go
deleted file mode 100644
index da64dfd5d2..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/db_mock_test.go
+++ /dev/null
@@ -1,208 +0,0 @@
-package sql
-
-import (
- "database/sql"
- "regexp"
- "testing"
- "time"
-
- "github.com/DATA-DOG/go-sqlmock"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-const (
- selectEscaped = `SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore\.events AS OF SYSTEM TIME '-1 ms' WHERE \( aggregate_type = \$1`
-)
-
-var (
- eventColumns = []string{"creation_date", "event_type", "event_sequence", "previous_aggregate_sequence", "event_data", "editor_service", "editor_user", "resource_owner", "instance_id", "aggregate_type", "aggregate_id", "aggregate_version"}
- expectedFilterEventsLimitFormat = regexp.MustCompile(selectEscaped + ` \) ORDER BY creation_date, event_sequence LIMIT \$2`).String()
- expectedFilterEventsDescFormat = regexp.MustCompile(selectEscaped + ` \) ORDER BY creation_date DESC, event_sequence DESC`).String()
- expectedFilterEventsAggregateIDLimit = regexp.MustCompile(selectEscaped + ` AND aggregate_id = \$2 \) ORDER BY creation_date, event_sequence LIMIT \$3`).String()
- expectedFilterEventsAggregateIDTypeLimit = regexp.MustCompile(selectEscaped + ` AND aggregate_id = \$2 \) ORDER BY creation_date, event_sequence LIMIT \$3`).String()
- expectedGetAllEvents = regexp.MustCompile(selectEscaped + ` \) ORDER BY creation_date, event_sequence`).String()
-
- expectedInsertStatement = regexp.MustCompile(`INSERT INTO eventstore\.events ` +
- `\(event_type, aggregate_type, aggregate_id, aggregate_version, creation_date, event_data, editor_user, editor_service, resource_owner, instance_id, previous_aggregate_sequence, previous_aggregate_type_sequence\) ` +
- `SELECT \$1, \$2, \$3, \$4, COALESCE\(\$5, now\(\)\), \$6, \$7, \$8, \$9, \$10, \$11 ` +
- `WHERE EXISTS \(` +
- `SELECT 1 FROM eventstore\.events WHERE aggregate_type = \$12 AND aggregate_id = \$13 HAVING MAX\(event_sequence\) = \$14 OR \(\$14::BIGINT IS NULL AND COUNT\(\*\) = 0\)\) ` +
- `RETURNING event_sequence, creation_date`).String()
-)
-
-type dbMock struct {
- sqlClient *sql.DB
- mock sqlmock.Sqlmock
-}
-
-func (db *dbMock) close() {
- db.sqlClient.Close()
-}
-
-func mockDB(t *testing.T) *dbMock {
- mockDB := dbMock{}
- var err error
- mockDB.sqlClient, mockDB.mock, err = sqlmock.New()
- if err != nil {
- t.Fatalf("error occured while creating stub db %v", err)
- }
-
- mockDB.mock.MatchExpectationsInOrder(true)
-
- return &mockDB
-}
-
-func (db *dbMock) expectBegin(err error) *dbMock {
- if err != nil {
- db.mock.ExpectBegin().WillReturnError(err)
- } else {
- db.mock.ExpectBegin()
- }
- return db
-}
-
-func (db *dbMock) expectSavepoint() *dbMock {
- db.mock.ExpectExec("SAVEPOINT").WillReturnResult(sqlmock.NewResult(1, 1))
-
- return db
-}
-
-func (db *dbMock) expectReleaseSavepoint(err error) *dbMock {
- expectation := db.mock.ExpectExec("RELEASE SAVEPOINT")
- if err == nil {
- expectation.WillReturnResult(sqlmock.NewResult(1, 1))
- } else {
- expectation.WillReturnError(err)
- }
-
- return db
-}
-
-func (db *dbMock) expectCommit(err error) *dbMock {
- if err != nil {
- db.mock.ExpectCommit().WillReturnError(err)
- } else {
- db.mock.ExpectCommit()
- }
- return db
-}
-
-func (db *dbMock) expectRollback(err error) *dbMock {
- if err != nil {
- db.mock.ExpectRollback().WillReturnError(err)
- } else {
- db.mock.ExpectRollback()
- }
- return db
-}
-
-func (db *dbMock) expectInsertEvent(e *models.Event, returnedSequence uint64) *dbMock {
- db.mock.ExpectQuery(expectedInsertStatement).
- WithArgs(
- e.Type, e.AggregateType, e.AggregateID, e.AggregateVersion, sqlmock.AnyArg(), Data(e.Data), e.EditorUser, e.EditorService, e.ResourceOwner, e.InstanceID, Sequence(e.PreviousSequence),
- e.AggregateType, e.AggregateID, Sequence(e.PreviousSequence), Sequence(e.PreviousSequence),
- ).
- WillReturnRows(
- sqlmock.NewRows([]string{"event_sequence", "creation_date"}).
- AddRow(returnedSequence, time.Now().UTC()),
- )
-
- return db
-}
-
-func (db *dbMock) expectInsertEventError(e *models.Event) *dbMock {
- db.mock.ExpectQuery(expectedInsertStatement).
- WithArgs(
- e.Type, e.AggregateType, e.AggregateID, e.AggregateVersion, sqlmock.AnyArg(), Data(e.Data), e.EditorUser, e.EditorService, e.ResourceOwner, e.InstanceID, Sequence(e.PreviousSequence),
- e.AggregateType, e.AggregateID, Sequence(e.PreviousSequence), Sequence(e.PreviousSequence),
- ).
- WillReturnError(sql.ErrTxDone)
-
- return db
-}
-
-func (db *dbMock) expectFilterEventsLimit(aggregateType string, limit uint64, eventCount int) *dbMock {
- rows := sqlmock.NewRows(eventColumns)
- for i := 0; i < eventCount; i++ {
- rows.AddRow(time.Now(), "eventType", Sequence(i+1), Sequence(i), nil, "svc", "hodor", "org", "instanceID", "aggType", "aggID", "v1.0.0")
- }
- db.mock.ExpectBegin()
- db.mock.ExpectQuery(expectedFilterEventsLimitFormat).
- WithArgs(aggregateType, limit).
- WillReturnRows(rows)
- db.mock.ExpectCommit()
- return db
-}
-
-func (db *dbMock) expectFilterEventsDesc(aggregateType string, eventCount int) *dbMock {
- rows := sqlmock.NewRows(eventColumns)
- for i := eventCount; i > 0; i-- {
- rows.AddRow(time.Now(), "eventType", Sequence(i+1), Sequence(i), nil, "svc", "hodor", "org", "instanceID", "aggType", "aggID", "v1.0.0")
- }
- db.mock.ExpectBegin()
- db.mock.ExpectQuery(expectedFilterEventsDescFormat).
- WillReturnRows(rows)
- db.mock.ExpectCommit()
- return db
-}
-
-func (db *dbMock) expectFilterEventsAggregateIDLimit(aggregateType, aggregateID string, limit uint64) *dbMock {
- rows := sqlmock.NewRows(eventColumns)
- for i := limit; i > 0; i-- {
- rows.AddRow(time.Now(), "eventType", Sequence(i+1), Sequence(i), nil, "svc", "hodor", "org", "instanceID", "aggType", "aggID", "v1.0.0")
- }
- db.mock.ExpectBegin()
- db.mock.ExpectQuery(expectedFilterEventsAggregateIDLimit).
- WithArgs(aggregateType, aggregateID, limit).
- WillReturnRows(rows)
- db.mock.ExpectCommit()
- return db
-}
-
-func (db *dbMock) expectFilterEventsAggregateIDTypeLimit(aggregateType, aggregateID string, limit uint64) *dbMock {
- rows := sqlmock.NewRows(eventColumns)
- for i := limit; i > 0; i-- {
- rows.AddRow(time.Now(), "eventType", Sequence(i+1), Sequence(i), nil, "svc", "hodor", "org", "instanceID", "aggType", "aggID", "v1.0.0")
- }
- db.mock.ExpectBegin()
- db.mock.ExpectQuery(expectedFilterEventsAggregateIDTypeLimit).
- WithArgs(aggregateType, aggregateID, limit).
- WillReturnRows(rows)
- db.mock.ExpectCommit()
- return db
-}
-
-func (db *dbMock) expectFilterEventsError(returnedErr error) *dbMock {
- db.mock.ExpectBegin()
- db.mock.ExpectQuery(expectedGetAllEvents).
- WillReturnError(returnedErr)
- db.mock.ExpectRollback()
- return db
-}
-
-func (db *dbMock) expectLatestSequenceFilter(aggregateType string, sequence Sequence) *dbMock {
- db.mock.ExpectBegin()
- db.mock.ExpectQuery(`SELECT MAX\(event_sequence\) FROM eventstore\.events AS OF SYSTEM TIME '-1 ms' WHERE \( aggregate_type = \$1 \)`).
- WithArgs(aggregateType).
- WillReturnRows(sqlmock.NewRows([]string{"max_sequence"}).AddRow(sequence))
- db.mock.ExpectCommit()
- return db
-}
-
-func (db *dbMock) expectLatestSequenceFilterError(aggregateType string, err error) *dbMock {
- db.mock.ExpectBegin()
- db.mock.ExpectQuery(`SELECT MAX\(event_sequence\) FROM eventstore\.events AS OF SYSTEM TIME '-1 ms' WHERE \( aggregate_type = \$1 \)`).
- WithArgs(aggregateType).WillReturnError(err)
- // db.mock.ExpectRollback()
- return db
-}
-
-func (db *dbMock) expectPrepareInsert(err error) *dbMock {
- prepare := db.mock.ExpectPrepare(expectedInsertStatement)
- if err != nil {
- prepare.WillReturnError(err)
- }
-
- return db
-}
diff --git a/internal/eventstore/v1/internal/repository/sql/filter.go b/internal/eventstore/v1/internal/repository/sql/filter.go
deleted file mode 100644
index 850a1ee30a..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/filter.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package sql
-
-import (
- "context"
- "database/sql"
- "errors"
- "runtime/debug"
-
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/database"
- errs "github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/telemetry/tracing"
-)
-
-type Querier interface {
- Query(query string, args ...interface{}) (*sql.Rows, error)
-}
-
-func (db *SQL) Filter(ctx context.Context, searchQuery *es_models.SearchQueryFactory) (events []*es_models.Event, err error) {
- if !searchQuery.InstanceFiltered {
- logging.WithFields("stack", string(debug.Stack())).Warn("instanceid not filtered")
- }
- return db.filter(ctx, db.client, searchQuery)
-}
-
-func (server *SQL) filter(ctx context.Context, db *database.DB, searchQuery *es_models.SearchQueryFactory) (events []*es_models.Event, err error) {
- query, limit, values, rowScanner := server.buildQuery(ctx, db, searchQuery)
- if query == "" {
- return nil, errs.ThrowInvalidArgument(nil, "SQL-rWeBw", "invalid query factory")
- }
-
- events = make([]*es_models.Event, 0, limit)
- err = db.QueryContext(ctx,
- func(rows *sql.Rows) error {
- for rows.Next() {
- event := new(es_models.Event)
- err := rowScanner(rows.Scan, event)
- if err != nil {
- return err
- }
-
- events = append(events, event)
- }
- return nil
- },
- query, values...,
- )
- if err != nil {
- logging.New().WithError(err).Info("query failed")
- return nil, errs.ThrowInternal(err, "SQL-IJuyR", "unable to filter events")
- }
- return events, nil
-}
-
-func (db *SQL) LatestSequence(ctx context.Context, queryFactory *es_models.SearchQueryFactory) (uint64, error) {
- query, _, values, rowScanner := db.buildQuery(ctx, db.client, queryFactory)
- if query == "" {
- return 0, errs.ThrowInvalidArgument(nil, "SQL-rWeBw", "invalid query factory")
- }
- sequence := new(Sequence)
- err := db.client.QueryRowContext(ctx, func(row *sql.Row) error {
- return rowScanner(row.Scan, sequence)
- }, query, values...)
- if err != nil && !errors.Is(err, sql.ErrNoRows) {
- logging.New().WithError(err).WithField("traceID", tracing.TraceIDFromCtx(ctx)).Info("query failed")
- return 0, errs.ThrowInternal(err, "SQL-Yczyx", "unable to filter latest sequence")
- }
- return uint64(*sequence), nil
-}
-
-func (db *SQL) InstanceIDs(ctx context.Context, queryFactory *es_models.SearchQueryFactory) (ids []string, err error) {
- query, _, values, rowScanner := db.buildQuery(ctx, db.client, queryFactory)
- if query == "" {
- return nil, errs.ThrowInvalidArgument(nil, "SQL-Sfwg2", "invalid query factory")
- }
-
- err = db.client.QueryContext(ctx,
- func(rows *sql.Rows) error {
- for rows.Next() {
- var id string
- err := rowScanner(rows.Scan, &id)
- if err != nil {
- return err
- }
-
- ids = append(ids, id)
- }
- return nil
- },
- query, values...)
- if err != nil {
- logging.New().WithError(err).Info("query failed")
- return nil, errs.ThrowInternal(err, "SQL-Sfg3r", "unable to filter instance ids")
- }
-
- return ids, nil
-}
diff --git a/internal/eventstore/v1/internal/repository/sql/filter_test.go b/internal/eventstore/v1/internal/repository/sql/filter_test.go
deleted file mode 100644
index 39ebbd0add..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/filter_test.go
+++ /dev/null
@@ -1,243 +0,0 @@
-package sql
-
-import (
- "context"
- "database/sql"
- "math"
- "testing"
-
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-type mockEvents struct {
- events []*es_models.Event
- t *testing.T
-}
-
-func TestSQL_Filter(t *testing.T) {
- type fields struct {
- client *dbMock
- }
- type args struct {
- events *mockEvents
- searchQuery *es_models.SearchQueryFactory
- }
- type res struct {
- wantErr bool
- isErrFunc func(error) bool
- eventsLen int
- }
- tests := []struct {
- name string
- fields fields
- args args
- res res
- }{
- {
- name: "only limit filter",
- fields: fields{
- client: mockDB(t).expectFilterEventsLimit("user", 34, 3),
- },
- args: args{
- events: &mockEvents{t: t},
- searchQuery: es_models.NewSearchQueryFactory().Limit(34).AddQuery().AggregateTypes("user").Factory(),
- },
- res: res{
- eventsLen: 3,
- wantErr: false,
- },
- },
- {
- name: "only desc filter",
- fields: fields{
- client: mockDB(t).expectFilterEventsDesc("user", 34),
- },
- args: args{
- events: &mockEvents{t: t},
- searchQuery: es_models.NewSearchQueryFactory().OrderDesc().AddQuery().AggregateTypes("user").Factory(),
- },
- res: res{
- eventsLen: 34,
- wantErr: false,
- },
- },
- {
- name: "no events found",
- fields: fields{
- client: mockDB(t).expectFilterEventsError(sql.ErrNoRows),
- },
- args: args{
- events: &mockEvents{t: t},
- searchQuery: es_models.NewSearchQueryFactory().AddQuery().AggregateTypes("nonAggregate").Factory(),
- },
- res: res{
- wantErr: true,
- isErrFunc: errors.IsInternal,
- },
- },
- {
- name: "filter fails because sql internal error",
- fields: fields{
- client: mockDB(t).expectFilterEventsError(sql.ErrConnDone),
- },
- args: args{
- events: &mockEvents{t: t},
- searchQuery: es_models.NewSearchQueryFactory().AddQuery().AggregateTypes("user").Factory(),
- },
- res: res{
- wantErr: true,
- isErrFunc: errors.IsInternal,
- },
- },
- {
- name: "filter by aggregate id",
- fields: fields{
- client: mockDB(t).expectFilterEventsAggregateIDLimit("user", "hop", 5),
- },
- args: args{
- events: &mockEvents{t: t},
- searchQuery: es_models.NewSearchQueryFactory().Limit(5).AddQuery().AggregateTypes("user").AggregateIDs("hop").Factory(),
- },
- res: res{
- wantErr: false,
- isErrFunc: nil,
- },
- },
- {
- name: "filter by aggregate id and aggregate type",
- fields: fields{
- client: mockDB(t).expectFilterEventsAggregateIDTypeLimit("user", "hop", 5),
- },
- args: args{
- events: &mockEvents{t: t},
- searchQuery: es_models.NewSearchQueryFactory().Limit(5).AddQuery().AggregateTypes("user").AggregateIDs("hop").Factory(),
- },
- res: res{
- wantErr: false,
- isErrFunc: nil,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- sql := &SQL{
- client: &database.DB{DB: tt.fields.client.sqlClient, Database: new(testDB)},
- allowOrderByCreationDate: true,
- }
- events, err := sql.Filter(context.Background(), tt.args.searchQuery)
- if (err != nil) != tt.res.wantErr {
- t.Errorf("SQL.Filter() error = %v, wantErr %v", err, tt.res.wantErr)
- }
-
- if tt.res.eventsLen != 0 && len(events) != tt.res.eventsLen {
- t.Errorf("events has wrong length got: %d want %d", len(events), tt.res.eventsLen)
- }
- if tt.res.wantErr && !tt.res.isErrFunc(err) {
- t.Errorf("got wrong error %v", err)
- }
- if err := tt.fields.client.mock.ExpectationsWereMet(); err != nil {
- t.Errorf("there were unfulfilled expectations: %s", err)
- }
- tt.fields.client.close()
- })
- }
-}
-
-func TestSQL_LatestSequence(t *testing.T) {
- type fields struct {
- client *dbMock
- }
- type args struct {
- searchQuery *es_models.SearchQueryFactory
- }
- type res struct {
- wantErr bool
- isErrFunc func(error) bool
- sequence uint64
- }
- tests := []struct {
- name string
- fields fields
- args args
- res res
- }{
- {
- name: "invalid query factory",
- args: args{
- searchQuery: nil,
- },
- fields: fields{
- client: mockDB(t),
- },
- res: res{
- wantErr: true,
- isErrFunc: errors.IsErrorInvalidArgument,
- },
- },
- {
- name: "no events for aggregate",
- args: args{
- searchQuery: es_models.NewSearchQueryFactory().Columns(es_models.Columns_Max_Sequence).AddQuery().AggregateTypes("idiot").Factory(),
- },
- fields: fields{
- client: mockDB(t).expectLatestSequenceFilterError("idiot", sql.ErrNoRows),
- },
- res: res{
- wantErr: false,
- sequence: 0,
- },
- },
- {
- name: "sql query error",
- args: args{
- searchQuery: es_models.NewSearchQueryFactory().Columns(es_models.Columns_Max_Sequence).AddQuery().AggregateTypes("idiot").Factory(),
- },
- fields: fields{
- client: mockDB(t).expectLatestSequenceFilterError("idiot", sql.ErrConnDone),
- },
- res: res{
- wantErr: true,
- isErrFunc: errors.IsInternal,
- sequence: 0,
- },
- },
- {
- name: "events for aggregate found",
- args: args{
- searchQuery: es_models.NewSearchQueryFactory().Columns(es_models.Columns_Max_Sequence).AddQuery().AggregateTypes("user").Factory(),
- },
- fields: fields{
- client: mockDB(t).expectLatestSequenceFilter("user", math.MaxUint64),
- },
- res: res{
- wantErr: false,
- sequence: math.MaxUint64,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- sql := &SQL{
- client: &database.DB{DB: tt.fields.client.sqlClient, Database: new(testDB)},
- }
-
- sequence, err := sql.LatestSequence(context.Background(), tt.args.searchQuery)
- if (err != nil) != tt.res.wantErr {
- t.Errorf("SQL.Filter() error = %v, wantErr %v", err, tt.res.wantErr)
- }
-
- if tt.res.sequence != sequence {
- t.Errorf("events has wrong length got: %d want %d", sequence, tt.res.sequence)
- }
- if tt.res.wantErr && !tt.res.isErrFunc(err) {
- t.Errorf("got wrong error %v", err)
- }
- if err := tt.fields.client.mock.ExpectationsWereMet(); err != nil {
- t.Errorf("there were unfulfilled expectations: %s", err)
- }
- tt.fields.client.close()
- })
- }
-}
diff --git a/internal/eventstore/v1/internal/repository/sql/query.go b/internal/eventstore/v1/internal/repository/sql/query.go
deleted file mode 100644
index 8b2ea1dc98..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/query.go
+++ /dev/null
@@ -1,238 +0,0 @@
-package sql
-
-import (
- "context"
- "database/sql"
- "errors"
- "fmt"
- "strconv"
- "strings"
-
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/api/call"
- "github.com/zitadel/zitadel/internal/database/dialect"
- z_errors "github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-const (
- selectStmt = "SELECT" +
- " creation_date" +
- ", event_type" +
- ", event_sequence" +
- ", previous_aggregate_sequence" +
- ", event_data" +
- ", editor_service" +
- ", editor_user" +
- ", resource_owner" +
- ", instance_id" +
- ", aggregate_type" +
- ", aggregate_id" +
- ", aggregate_version" +
- " FROM eventstore.events"
-)
-
-func (sql *SQL) buildQuery(ctx context.Context, db dialect.Database, queryFactory *es_models.SearchQueryFactory) (query string, limit uint64, values []interface{}, rowScanner func(s scan, dest interface{}) error) {
- searchQuery, err := queryFactory.Build()
- if err != nil {
- logging.New().WithError(err).Warn("search query factory invalid")
- return "", 0, nil, nil
- }
- query, rowScanner = prepareColumns(searchQuery.Columns)
- where, values := prepareCondition(searchQuery.Filters)
- if where == "" || query == "" {
- return "", 0, nil, nil
- }
-
- if travel := db.Timetravel(call.Took(ctx)); travel != "" {
- query += travel
- }
- query += where
-
- if searchQuery.Columns == es_models.Columns_Event {
- var order string
- if sql.allowOrderByCreationDate {
- order = " ORDER BY creation_date, event_sequence"
- if searchQuery.Desc {
- order = " ORDER BY creation_date DESC, event_sequence DESC"
- }
- } else {
- order = " ORDER BY event_sequence"
- if searchQuery.Desc {
- order = " ORDER BY event_sequence DESC"
- }
- }
- query += order
- }
-
- if searchQuery.Limit > 0 {
- values = append(values, searchQuery.Limit)
- query += " LIMIT ?"
- }
-
- query = numberPlaceholder(query, "?", "$")
-
- return query, searchQuery.Limit, values, rowScanner
-}
-
-func prepareCondition(filters [][]*es_models.Filter) (clause string, values []interface{}) {
- values = make([]interface{}, 0, len(filters))
- clauses := make([]string, len(filters))
-
- if len(filters) == 0 {
- return clause, values
- }
- for i, filter := range filters {
- subClauses := make([]string, 0, len(filter))
- for _, f := range filter {
- value := f.GetValue()
-
- subClauses = append(subClauses, getCondition(f))
- if subClauses[len(subClauses)-1] == "" {
- return "", nil
- }
- values = append(values, value)
- }
- clauses[i] = "( " + strings.Join(subClauses, " AND ") + " )"
- }
- return " WHERE " + strings.Join(clauses, " OR "), values
-}
-
-type scan func(dest ...interface{}) error
-
-func prepareColumns(columns es_models.Columns) (string, func(s scan, dest interface{}) error) {
- switch columns {
- case es_models.Columns_Max_Sequence:
- return "SELECT MAX(event_sequence) FROM eventstore.events", func(row scan, dest interface{}) (err error) {
- sequence, ok := dest.(*Sequence)
- if !ok {
- return z_errors.ThrowInvalidArgument(nil, "SQL-NBjA9", "type must be sequence")
- }
- err = row(sequence)
- if err == nil || errors.Is(err, sql.ErrNoRows) {
- return nil
- }
- return z_errors.ThrowInternal(err, "SQL-bN5xg", "something went wrong")
- }
- case es_models.Columns_InstanceIDs:
- return "SELECT DISTINCT instance_id FROM eventstore.events", func(row scan, dest interface{}) (err error) {
- instanceID, ok := dest.(*string)
- if !ok {
- return z_errors.ThrowInvalidArgument(nil, "SQL-Fef5h", "type must be *string]")
- }
- err = row(instanceID)
- if err != nil {
- logging.New().WithError(err).Warn("unable to scan row")
- return z_errors.ThrowInternal(err, "SQL-SFef3", "unable to scan row")
- }
- return nil
- }
- case es_models.Columns_Event:
- return selectStmt, func(row scan, dest interface{}) (err error) {
- event, ok := dest.(*es_models.Event)
- if !ok {
- return z_errors.ThrowInvalidArgument(nil, "SQL-4GP6F", "type must be event")
- }
- var previousSequence Sequence
- data := make(Data, 0)
-
- err = row(
- &event.CreationDate,
- &event.Type,
- &event.Sequence,
- &previousSequence,
- &data,
- &event.EditorService,
- &event.EditorUser,
- &event.ResourceOwner,
- &event.InstanceID,
- &event.AggregateType,
- &event.AggregateID,
- &event.AggregateVersion,
- )
-
- if err != nil {
- logging.New().WithError(err).Warn("unable to scan row")
- return z_errors.ThrowInternal(err, "SQL-J0hFS", "unable to scan row")
- }
-
- event.PreviousSequence = uint64(previousSequence)
-
- event.Data = make([]byte, len(data))
- copy(event.Data, data)
-
- return nil
- }
- default:
- return "", nil
- }
-}
-
-func numberPlaceholder(query, old, new string) string {
- for i, hasChanged := 1, true; hasChanged; i++ {
- newQuery := strings.Replace(query, old, new+strconv.Itoa(i), 1)
- hasChanged = query != newQuery
- query = newQuery
- }
- return query
-}
-
-func getCondition(filter *es_models.Filter) (condition string) {
- field := getField(filter.GetField())
- operation := getOperation(filter.GetOperation())
- if field == "" || operation == "" {
- return ""
- }
- format := getConditionFormat(filter.GetOperation())
-
- return fmt.Sprintf(format, field, operation)
-}
-
-func getConditionFormat(operation es_models.Operation) string {
- switch operation {
- case es_models.Operation_In:
- return "%s %s ANY(?)"
- case es_models.Operation_NotIn:
- return "%s %s ALL(?)"
- }
- return "%s %s ?"
-}
-
-func getField(field es_models.Field) string {
- switch field {
- case es_models.Field_AggregateID:
- return "aggregate_id"
- case es_models.Field_AggregateType:
- return "aggregate_type"
- case es_models.Field_LatestSequence:
- return "event_sequence"
- case es_models.Field_ResourceOwner:
- return "resource_owner"
- case es_models.Field_InstanceID:
- return "instance_id"
- case es_models.Field_EditorService:
- return "editor_service"
- case es_models.Field_EditorUser:
- return "editor_user"
- case es_models.Field_EventType:
- return "event_type"
- case es_models.Field_CreationDate:
- return "creation_date"
- }
- return ""
-}
-
-func getOperation(operation es_models.Operation) string {
- switch operation {
- case es_models.Operation_Equals, es_models.Operation_In:
- return "="
- case es_models.Operation_Greater:
- return ">"
- case es_models.Operation_Less:
- return "<"
- case es_models.Operation_NotIn:
- return "<>"
- }
- return ""
-}
diff --git a/internal/eventstore/v1/internal/repository/sql/query_test.go b/internal/eventstore/v1/internal/repository/sql/query_test.go
deleted file mode 100644
index 0c4b4d9db9..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/query_test.go
+++ /dev/null
@@ -1,504 +0,0 @@
-package sql
-
-import (
- "context"
- "database/sql"
- "reflect"
- "testing"
- "time"
-
- "github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-func Test_numberPlaceholder(t *testing.T) {
- type args struct {
- query string
- old string
- new string
- }
- type res struct {
- query string
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "no replaces",
- args: args{
- new: "$",
- old: "?",
- query: "SELECT * FROM eventstore.events",
- },
- res: res{
- query: "SELECT * FROM eventstore.events",
- },
- },
- {
- name: "two replaces",
- args: args{
- new: "$",
- old: "?",
- query: "SELECT * FROM eventstore.events WHERE aggregate_type = ? AND LIMIT = ?",
- },
- res: res{
- query: "SELECT * FROM eventstore.events WHERE aggregate_type = $1 AND LIMIT = $2",
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if got := numberPlaceholder(tt.args.query, tt.args.old, tt.args.new); got != tt.res.query {
- t.Errorf("numberPlaceholder() = %v, want %v", got, tt.res.query)
- }
- })
- }
-}
-
-func Test_getOperation(t *testing.T) {
- t.Run("all ops", func(t *testing.T) {
- for op, expected := range map[es_models.Operation]string{
- es_models.Operation_Equals: "=",
- es_models.Operation_In: "=",
- es_models.Operation_Greater: ">",
- es_models.Operation_Less: "<",
- es_models.Operation(-1): "",
- } {
- if got := getOperation(op); got != expected {
- t.Errorf("getOperation() = %v, want %v", got, expected)
- }
- }
- })
-}
-
-func Test_getField(t *testing.T) {
- t.Run("all fields", func(t *testing.T) {
- for field, expected := range map[es_models.Field]string{
- es_models.Field_AggregateType: "aggregate_type",
- es_models.Field_AggregateID: "aggregate_id",
- es_models.Field_LatestSequence: "event_sequence",
- es_models.Field_ResourceOwner: "resource_owner",
- es_models.Field_InstanceID: "instance_id",
- es_models.Field_EditorService: "editor_service",
- es_models.Field_EditorUser: "editor_user",
- es_models.Field_EventType: "event_type",
- es_models.Field(-1): "",
- } {
- if got := getField(field); got != expected {
- t.Errorf("getField() = %v, want %v", got, expected)
- }
- }
- })
-}
-
-func Test_getConditionFormat(t *testing.T) {
- type args struct {
- operation es_models.Operation
- }
- tests := []struct {
- name string
- args args
- want string
- }{
- {
- name: "no in operation",
- args: args{
- operation: es_models.Operation_Equals,
- },
- want: "%s %s ?",
- },
- {
- name: "in operation",
- args: args{
- operation: es_models.Operation_In,
- },
- want: "%s %s ANY(?)",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if got := getConditionFormat(tt.args.operation); got != tt.want {
- t.Errorf("prepareConditionFormat() = %v, want %v", got, tt.want)
- }
- })
- }
-}
-
-func Test_getCondition(t *testing.T) {
- type args struct {
- filter *es_models.Filter
- }
- tests := []struct {
- name string
- args args
- want string
- }{
- {
- name: "equals",
- args: args{filter: es_models.NewFilter(es_models.Field_AggregateID, "", es_models.Operation_Equals)},
- want: "aggregate_id = ?",
- },
- {
- name: "greater",
- args: args{filter: es_models.NewFilter(es_models.Field_LatestSequence, 0, es_models.Operation_Greater)},
- want: "event_sequence > ?",
- },
- {
- name: "less",
- args: args{filter: es_models.NewFilter(es_models.Field_LatestSequence, 5000, es_models.Operation_Less)},
- want: "event_sequence < ?",
- },
- {
- name: "in list",
- args: args{filter: es_models.NewFilter(es_models.Field_AggregateType, []es_models.AggregateType{"movies", "actors"}, es_models.Operation_In)},
- want: "aggregate_type = ANY(?)",
- },
- {
- name: "invalid operation",
- args: args{filter: es_models.NewFilter(es_models.Field_AggregateType, []es_models.AggregateType{"movies", "actors"}, es_models.Operation(-1))},
- want: "",
- },
- {
- name: "invalid field",
- args: args{filter: es_models.NewFilter(es_models.Field(-1), []es_models.AggregateType{"movies", "actors"}, es_models.Operation_Equals)},
- want: "",
- },
- {
- name: "invalid field and operation",
- args: args{filter: es_models.NewFilter(es_models.Field(-1), []es_models.AggregateType{"movies", "actors"}, es_models.Operation(-1))},
- want: "",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if got := getCondition(tt.args.filter); got != tt.want {
- t.Errorf("getCondition() = %v, want %v", got, tt.want)
- }
- })
- }
-}
-
-func Test_prepareColumns(t *testing.T) {
- type args struct {
- columns es_models.Columns
- dest interface{}
- dbErr error
- }
- type res struct {
- query string
- dbRow []interface{}
- expected interface{}
- dbErr func(error) bool
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "invalid columns",
- args: args{columns: es_models.Columns(-1)},
- res: res{
- query: "",
- dbErr: func(err error) bool { return err == nil },
- },
- },
- {
- name: "max column",
- args: args{
- columns: es_models.Columns_Max_Sequence,
- dest: new(Sequence),
- },
- res: res{
- query: "SELECT MAX(event_sequence) FROM eventstore.events",
- dbRow: []interface{}{Sequence(5)},
- expected: Sequence(5),
- },
- },
- {
- name: "max sequence wrong dest type",
- args: args{
- columns: es_models.Columns_Max_Sequence,
- dest: new(uint64),
- },
- res: res{
- query: "SELECT MAX(event_sequence) FROM eventstore.events",
- dbErr: errors.IsErrorInvalidArgument,
- },
- },
- {
- name: "event",
- args: args{
- columns: es_models.Columns_Event,
- dest: new(es_models.Event),
- },
- res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events",
- dbRow: []interface{}{time.Time{}, es_models.EventType(""), uint64(5), Sequence(0), Data(nil), "", "", "", "", es_models.AggregateType("user"), "hodor", es_models.Version("")},
- expected: es_models.Event{AggregateID: "hodor", AggregateType: "user", Sequence: 5, Data: make(Data, 0)},
- },
- },
- {
- name: "event wrong dest type",
- args: args{
- columns: es_models.Columns_Event,
- dest: new(uint64),
- },
- res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events",
- dbErr: errors.IsErrorInvalidArgument,
- },
- },
- {
- name: "event query error",
- args: args{
- columns: es_models.Columns_Event,
- dest: new(es_models.Event),
- dbErr: sql.ErrConnDone,
- },
- res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events",
- dbErr: errors.IsInternal,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- query, rowScanner := prepareColumns(tt.args.columns)
- if query != tt.res.query {
- t.Errorf("prepareColumns() got = %v, want %v", query, tt.res.query)
- }
- if tt.res.query == "" && rowScanner != nil {
- t.Errorf("row scanner should be nil")
- }
- if rowScanner == nil {
- return
- }
- err := rowScanner(prepareTestScan(tt.args.dbErr, tt.res.dbRow), tt.args.dest)
- if tt.res.dbErr != nil {
- if !tt.res.dbErr(err) {
- t.Errorf("wrong error type in rowScanner got: %v", err)
- }
- } else {
- if !reflect.DeepEqual(reflect.Indirect(reflect.ValueOf(tt.args.dest)).Interface(), tt.res.expected) {
- t.Errorf("unexpected result from rowScanner want: %v got: %v", tt.res.dbRow, tt.args.dest)
- }
- }
- })
- }
-}
-
-func prepareTestScan(err error, res []interface{}) scan {
- return func(dests ...interface{}) error {
- if err != nil {
- return err
- }
- if len(dests) != len(res) {
- return errors.ThrowInvalidArgumentf(nil, "SQL-NML1q", "expected len %d got %d", len(res), len(dests))
- }
- for i, r := range res {
- reflect.ValueOf(dests[i]).Elem().Set(reflect.ValueOf(r))
- }
-
- return nil
- }
-}
-
-func Test_prepareCondition(t *testing.T) {
- type args struct {
- filters [][]*es_models.Filter
- }
- type res struct {
- clause string
- values []interface{}
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "nil filters",
- args: args{
- filters: nil,
- },
- res: res{
- clause: "",
- values: nil,
- },
- },
- {
- name: "empty filters",
- args: args{
- filters: [][]*es_models.Filter{},
- },
- res: res{
- clause: "",
- values: nil,
- },
- },
- {
- name: "invalid condition",
- args: args{
- filters: [][]*es_models.Filter{
- {
- es_models.NewFilter(es_models.Field_AggregateID, "wrong", es_models.Operation(-1)),
- },
- },
- },
- res: res{
- clause: "",
- values: nil,
- },
- },
- {
- name: "array as condition value",
- args: args{
- filters: [][]*es_models.Filter{
- {
- es_models.NewFilter(es_models.Field_AggregateType, []es_models.AggregateType{"user", "org"}, es_models.Operation_In),
- },
- },
- },
- res: res{
- clause: " WHERE ( aggregate_type = ANY(?) )",
- values: []interface{}{[]es_models.AggregateType{"user", "org"}},
- },
- },
- {
- name: "multiple filters",
- args: args{
- filters: [][]*es_models.Filter{
- {
- es_models.NewFilter(es_models.Field_AggregateType, []es_models.AggregateType{"user", "org"}, es_models.Operation_In),
- es_models.NewFilter(es_models.Field_AggregateID, "1234", es_models.Operation_Equals),
- es_models.NewFilter(es_models.Field_EventType, []es_models.EventType{"user.created", "org.created"}, es_models.Operation_In),
- },
- },
- },
- res: res{
- clause: " WHERE ( aggregate_type = ANY(?) AND aggregate_id = ? AND event_type = ANY(?) )",
- values: []interface{}{[]es_models.AggregateType{"user", "org"}, "1234", []es_models.EventType{"user.created", "org.created"}},
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- gotClause, gotValues := prepareCondition(tt.args.filters)
- if gotClause != tt.res.clause {
- t.Errorf("prepareCondition() gotClause = %v, want %v", gotClause, tt.res.clause)
- }
- if len(gotValues) != len(tt.res.values) {
- t.Errorf("wrong length of gotten values got = %d, want %d", len(gotValues), len(tt.res.values))
- return
- }
- for i, value := range gotValues {
- if !reflect.DeepEqual(value, tt.res.values[i]) {
- t.Errorf("prepareCondition() gotValues = %v, want %v", gotValues, tt.res.values)
- }
- }
- })
- }
-}
-
-func Test_buildQuery(t *testing.T) {
- type args struct {
- queryFactory *es_models.SearchQueryFactory
- }
- type res struct {
- query string
- limit uint64
- values []interface{}
- rowScanner bool
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "invalid query factory",
- args: args{
- queryFactory: nil,
- },
- res: res{
- query: "",
- limit: 0,
- rowScanner: false,
- values: nil,
- },
- },
- {
- name: "with order by desc",
- args: args{
- queryFactory: es_models.NewSearchQueryFactory().OrderDesc().AddQuery().AggregateTypes("user").Factory(),
- },
- res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events AS OF SYSTEM TIME '-1 ms' WHERE ( aggregate_type = $1 ) ORDER BY creation_date DESC, event_sequence DESC",
- rowScanner: true,
- values: []interface{}{es_models.AggregateType("user")},
- },
- },
- {
- name: "with limit",
- args: args{
- queryFactory: es_models.NewSearchQueryFactory().Limit(5).AddQuery().AggregateTypes("user").Factory(),
- },
- res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events AS OF SYSTEM TIME '-1 ms' WHERE ( aggregate_type = $1 ) ORDER BY creation_date, event_sequence LIMIT $2",
- rowScanner: true,
- values: []interface{}{es_models.AggregateType("user"), uint64(5)},
- limit: 5,
- },
- },
- {
- name: "with limit and order by desc",
- args: args{
- queryFactory: es_models.NewSearchQueryFactory().Limit(5).OrderDesc().AddQuery().AggregateTypes("user").Factory(),
- },
- res: res{
- query: "SELECT creation_date, event_type, event_sequence, previous_aggregate_sequence, event_data, editor_service, editor_user, resource_owner, instance_id, aggregate_type, aggregate_id, aggregate_version FROM eventstore.events AS OF SYSTEM TIME '-1 ms' WHERE ( aggregate_type = $1 ) ORDER BY creation_date DESC, event_sequence DESC LIMIT $2",
- rowScanner: true,
- values: []interface{}{es_models.AggregateType("user"), uint64(5)},
- limit: 5,
- },
- },
- }
- for _, tt := range tests {
- ctx := context.Background()
- db := new(testDB)
- t.Run(tt.name, func(t *testing.T) {
- gotQuery, gotLimit, gotValues, gotRowScanner := (&SQL{allowOrderByCreationDate: true}).buildQuery(ctx, db, tt.args.queryFactory)
- if gotQuery != tt.res.query {
- t.Errorf("buildQuery() gotQuery = %v, want %v", gotQuery, tt.res.query)
- }
- if gotLimit != tt.res.limit {
- t.Errorf("buildQuery() gotLimit = %v, want %v", gotLimit, tt.res.limit)
- }
- if len(gotValues) != len(tt.res.values) {
- t.Errorf("wrong length of gotten values got = %d, want %d", len(gotValues), len(tt.res.values))
- return
- }
- for i, value := range gotValues {
- if !reflect.DeepEqual(value, tt.res.values[i]) {
- t.Errorf("prepareCondition() gotValues = %v, want %v", gotValues, tt.res.values)
- }
- }
- if (tt.res.rowScanner && gotRowScanner == nil) || (!tt.res.rowScanner && gotRowScanner != nil) {
- t.Errorf("rowScanner should be nil==%v got nil==%v", tt.res.rowScanner, gotRowScanner == nil)
- }
- })
- }
-}
-
-type testDB struct{}
-
-func (_ *testDB) Timetravel(time.Duration) string { return " AS OF SYSTEM TIME '-1 ms' " }
-
-func (*testDB) DatabaseName() string { return "db" }
-
-func (*testDB) Username() string { return "user" }
-
-func (*testDB) Type() string { return "type" }
diff --git a/internal/eventstore/v1/internal/repository/sql/sql.go b/internal/eventstore/v1/internal/repository/sql/sql.go
deleted file mode 100644
index ab4c9ca26c..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/sql.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package sql
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/database"
-)
-
-type SQL struct {
- client *database.DB
- allowOrderByCreationDate bool
-}
-
-func (db *SQL) Health(ctx context.Context) error {
- return db.client.Ping()
-}
diff --git a/internal/eventstore/v1/internal/repository/sql/types.go b/internal/eventstore/v1/internal/repository/sql/types.go
deleted file mode 100644
index 769bce5e9c..0000000000
--- a/internal/eventstore/v1/internal/repository/sql/types.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package sql
-
-import "database/sql/driver"
-
-// Data represents a byte array that may be null.
-// Data implements the sql.Scanner interface
-type Data []byte
-
-// Scan implements the Scanner interface.
-func (data *Data) Scan(value interface{}) error {
- if value == nil {
- *data = nil
- return nil
- }
- *data = Data(value.([]byte))
- return nil
-}
-
-// Value implements the driver Valuer interface.
-func (data Data) Value() (driver.Value, error) {
- if len(data) == 0 {
- return nil, nil
- }
- return []byte(data), nil
-}
-
-// Sequence represents a number that may be null.
-// Sequence implements the sql.Scanner interface
-type Sequence uint64
-
-// Scan implements the Scanner interface.
-func (seq *Sequence) Scan(value interface{}) error {
- if value == nil {
- *seq = 0
- return nil
- }
- *seq = Sequence(value.(int64))
- return nil
-}
-
-// Value implements the driver Valuer interface.
-func (seq Sequence) Value() (driver.Value, error) {
- if seq == 0 {
- return nil, nil
- }
- return int64(seq), nil
-}
diff --git a/internal/eventstore/v1/locker/lock.go b/internal/eventstore/v1/locker/lock.go
deleted file mode 100644
index dc0682ba54..0000000000
--- a/internal/eventstore/v1/locker/lock.go
+++ /dev/null
@@ -1,47 +0,0 @@
-package locker
-
-import (
- "context"
- "database/sql"
- "fmt"
- "time"
-
- "github.com/cockroachdb/cockroach-go/v2/crdb"
- "github.com/zitadel/logging"
-
- caos_errs "github.com/zitadel/zitadel/internal/errors"
-)
-
-const (
- insertStmtFormat = "INSERT INTO %s" +
- " (locker_id, locked_until, view_name, instance_id) VALUES ($1, now()+$2::INTERVAL, $3, $4)" +
- " ON CONFLICT (view_name, instance_id)" +
- " DO UPDATE SET locker_id = $1, locked_until = now()+$2::INTERVAL" +
- " WHERE locks.view_name = $3 AND locks.instance_id = $4 AND (locks.locker_id = $1 OR locks.locked_until < now())"
- millisecondsAsSeconds = int64(time.Second / time.Millisecond)
-)
-
-type lock struct {
- LockerID string `gorm:"column:locker_id;primary_key"`
- LockedUntil time.Time `gorm:"column:locked_until"`
- ViewName string `gorm:"column:view_name;primary_key"`
-}
-
-func Renew(dbClient *sql.DB, lockTable, lockerID, viewModel, instanceID string, waitTime time.Duration) error {
- return crdb.ExecuteTx(context.Background(), dbClient, nil, func(tx *sql.Tx) error {
- insert := fmt.Sprintf(insertStmtFormat, lockTable)
- result, err := tx.Exec(insert,
- lockerID, waitTime, viewModel, instanceID)
-
- if err != nil {
- tx.Rollback()
- return err
- }
-
- if rows, _ := result.RowsAffected(); rows == 0 {
- return caos_errs.ThrowAlreadyExists(nil, "SPOOL-lso0e", "view already locked")
- }
- logging.LogWithFields("LOCKE-lOgbg", "view", viewModel, "locker", lockerID).Debug("locker changed")
- return nil
- })
-}
diff --git a/internal/eventstore/v1/locker/lock_test.go b/internal/eventstore/v1/locker/lock_test.go
deleted file mode 100644
index 37afa65deb..0000000000
--- a/internal/eventstore/v1/locker/lock_test.go
+++ /dev/null
@@ -1,126 +0,0 @@
-package locker
-
-import (
- "database/sql"
- "testing"
- "time"
-
- "github.com/DATA-DOG/go-sqlmock"
-)
-
-type dbMock struct {
- db *sql.DB
- mock sqlmock.Sqlmock
-}
-
-func mockDB(t *testing.T) *dbMock {
- mockDB := dbMock{}
- var err error
- mockDB.db, mockDB.mock, err = sqlmock.New()
- if err != nil {
- t.Fatalf("error occured while creating stub db %v", err)
- }
-
- mockDB.mock.MatchExpectationsInOrder(true)
-
- return &mockDB
-}
-
-func (db *dbMock) expectCommit() *dbMock {
- db.mock.ExpectCommit()
-
- return db
-}
-
-func (db *dbMock) expectRollback() *dbMock {
- db.mock.ExpectRollback()
-
- return db
-}
-
-func (db *dbMock) expectBegin() *dbMock {
- db.mock.ExpectBegin()
-
- return db
-}
-
-func (db *dbMock) expectSavepoint() *dbMock {
- db.mock.ExpectExec("SAVEPOINT").WillReturnResult(sqlmock.NewResult(1, 1))
- return db
-}
-
-func (db *dbMock) expectReleaseSavepoint() *dbMock {
- db.mock.ExpectExec("RELEASE SAVEPOINT").WillReturnResult(sqlmock.NewResult(1, 1))
-
- return db
-}
-
-func (db *dbMock) expectRenew(lockerID, view, instanceID string, affectedRows int64) *dbMock {
- query := db.mock.
- ExpectExec(`INSERT INTO table\.locks \(locker_id, locked_until, view_name, instance_id\) VALUES \(\$1, now\(\)\+\$2::INTERVAL, \$3\, \$4\) ON CONFLICT \(view_name, instance_id\) DO UPDATE SET locker_id = \$1, locked_until = now\(\)\+\$2::INTERVAL WHERE locks\.view_name = \$3 AND locks\.instance_id = \$4 AND \(locks\.locker_id = \$1 OR locks\.locked_until < now\(\)\)`).
- WithArgs(lockerID, sqlmock.AnyArg(), view, instanceID).
- WillReturnResult(sqlmock.NewResult(1, 1))
-
- if affectedRows == 0 {
- query.WillReturnResult(sqlmock.NewResult(0, 0))
- } else {
- query.WillReturnResult(sqlmock.NewResult(1, affectedRows))
- }
-
- return db
-}
-
-func Test_locker_Renew(t *testing.T) {
- type fields struct {
- db *dbMock
- }
- type args struct {
- tableName string
- lockerID string
- viewModel string
- instanceID string
- waitTime time.Duration
- }
- tests := []struct {
- name string
- fields fields
- args args
- wantErr bool
- }{
- {
- name: "renew succeeded",
- fields: fields{
- db: mockDB(t).
- expectBegin().
- expectSavepoint().
- expectRenew("locker", "view", "instanceID", 1).
- expectReleaseSavepoint().
- expectCommit(),
- },
- args: args{tableName: "table.locks", lockerID: "locker", viewModel: "view", instanceID: "instanceID", waitTime: 1 * time.Second},
- wantErr: false,
- },
- {
- name: "renew now rows updated",
- fields: fields{
- db: mockDB(t).
- expectBegin().
- expectSavepoint().
- expectRenew("locker", "view", "instanceID", 0).
- expectRollback(),
- },
- args: args{tableName: "table.locks", lockerID: "locker", viewModel: "view", instanceID: "instanceID", waitTime: 1 * time.Second},
- wantErr: true,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if err := Renew(tt.fields.db.db, tt.args.tableName, tt.args.lockerID, tt.args.viewModel, tt.args.instanceID, tt.args.waitTime); (err != nil) != tt.wantErr {
- t.Errorf("locker.Renew() error = %v, wantErr %v", err, tt.wantErr)
- }
- if err := tt.fields.db.mock.ExpectationsWereMet(); err != nil {
- t.Errorf("not all database expectations met: %v", err)
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/mock/eventstore.mock.go b/internal/eventstore/v1/mock/eventstore.mock.go
deleted file mode 100644
index ec8ffefae5..0000000000
--- a/internal/eventstore/v1/mock/eventstore.mock.go
+++ /dev/null
@@ -1,84 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: github.com/zitadel/zitadel/internal/eventstore/v1 (interfaces: Eventstore)
-
-// Package mock is a generated GoMock package.
-package mock
-
-import (
- context "context"
- reflect "reflect"
-
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- gomock "github.com/golang/mock/gomock"
-)
-
-// MockEventstore is a mock of Eventstore interface.
-type MockEventstore struct {
- ctrl *gomock.Controller
- recorder *MockEventstoreMockRecorder
-}
-
-// MockEventstoreMockRecorder is the mock recorder for MockEventstore.
-type MockEventstoreMockRecorder struct {
- mock *MockEventstore
-}
-
-// NewMockEventstore creates a new mock instance.
-func NewMockEventstore(ctrl *gomock.Controller) *MockEventstore {
- mock := &MockEventstore{ctrl: ctrl}
- mock.recorder = &MockEventstoreMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockEventstore) EXPECT() *MockEventstoreMockRecorder {
- return m.recorder
-}
-
-// FilterEvents mocks base method.
-func (m *MockEventstore) FilterEvents(arg0 context.Context, arg1 *models.SearchQuery) ([]*models.Event, error) {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "FilterEvents", arg0, arg1)
- ret0, _ := ret[0].([]*models.Event)
- ret1, _ := ret[1].(error)
- return ret0, ret1
-}
-
-// FilterEvents indicates an expected call of FilterEvents.
-func (mr *MockEventstoreMockRecorder) FilterEvents(arg0, arg1 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "FilterEvents", reflect.TypeOf((*MockEventstore)(nil).FilterEvents), arg0, arg1)
-}
-
-// Health mocks base method.
-func (m *MockEventstore) Health(arg0 context.Context) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Health", arg0)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Health indicates an expected call of Health.
-func (mr *MockEventstoreMockRecorder) Health(arg0 interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Health", reflect.TypeOf((*MockEventstore)(nil).Health), arg0)
-}
-
-// Subscribe mocks base method.
-func (m *MockEventstore) Subscribe(arg0 ...models.AggregateType) *v1.Subscription {
- m.ctrl.T.Helper()
- varargs := []interface{}{}
- for _, a := range arg0 {
- varargs = append(varargs, a)
- }
- ret := m.ctrl.Call(m, "Subscribe", varargs...)
- ret0, _ := ret[0].(*v1.Subscription)
- return ret0
-}
-
-// Subscribe indicates an expected call of Subscribe.
-func (mr *MockEventstoreMockRecorder) Subscribe(arg0 ...interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Subscribe", reflect.TypeOf((*MockEventstore)(nil).Subscribe), arg0...)
-}
diff --git a/internal/eventstore/v1/models/aggregate.go b/internal/eventstore/v1/models/aggregate.go
deleted file mode 100644
index b996e1b8a0..0000000000
--- a/internal/eventstore/v1/models/aggregate.go
+++ /dev/null
@@ -1,99 +0,0 @@
-package models
-
-import (
- "time"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-type AggregateType string
-
-func (at AggregateType) String() string {
- return string(at)
-}
-
-type Aggregates []*Aggregate
-
-type Aggregate struct {
- ID string
- typ AggregateType
- PreviousSequence uint64
- version Version
-
- editorService string
- editorUser string
- resourceOwner string
- instanceID string
- Events []*Event
- Precondition *precondition
-}
-
-func (a *Aggregate) Type() AggregateType {
- return a.typ
-}
-
-type precondition struct {
- Query *SearchQuery
- Validation func(...*Event) error
-}
-
-func (a *Aggregate) AppendEvent(typ EventType, payload interface{}) (*Aggregate, error) {
- if string(typ) == "" {
- return a, errors.ThrowInvalidArgument(nil, "MODEL-TGoCb", "no event type")
- }
- data, err := eventData(payload)
- if err != nil {
- return a, err
- }
-
- e := &Event{
- CreationDate: time.Now(),
- Data: data,
- Type: typ,
- AggregateID: a.ID,
- AggregateType: a.typ,
- AggregateVersion: a.version,
- EditorService: a.editorService,
- EditorUser: a.editorUser,
- ResourceOwner: a.resourceOwner,
- InstanceID: a.instanceID,
- }
-
- a.Events = append(a.Events, e)
- return a, nil
-}
-
-func (a *Aggregate) SetPrecondition(query *SearchQuery, validateFunc func(...*Event) error) *Aggregate {
- a.Precondition = &precondition{Query: query, Validation: validateFunc}
- return a
-}
-
-func (a *Aggregate) Validate() error {
- if a == nil {
- return errors.ThrowPreconditionFailed(nil, "MODEL-yi5AC", "aggregate is nil")
- }
- if a.ID == "" {
- return errors.ThrowPreconditionFailed(nil, "MODEL-FSjKV", "id not set")
- }
- if string(a.typ) == "" {
- return errors.ThrowPreconditionFailed(nil, "MODEL-aj4t2", "type not set")
- }
- if err := a.version.Validate(); err != nil {
- return errors.ThrowPreconditionFailed(err, "MODEL-PupjX", "invalid version")
- }
-
- if a.editorService == "" {
- return errors.ThrowPreconditionFailed(nil, "MODEL-clYbY", "editor service not set")
- }
- if a.editorUser == "" {
- return errors.ThrowPreconditionFailed(nil, "MODEL-Xcssi", "editor user not set")
- }
- if a.resourceOwner == "" {
- return errors.ThrowPreconditionFailed(nil, "MODEL-eBYUW", "resource owner not set")
- }
- if a.Precondition != nil && (a.Precondition.Query == nil || a.Precondition.Validation == nil) {
- return errors.ThrowPreconditionFailed(nil, "MODEL-EEUvA", "invalid precondition")
- }
-
- return nil
-}
diff --git a/internal/eventstore/v1/models/aggregate_creator.go b/internal/eventstore/v1/models/aggregate_creator.go
deleted file mode 100644
index e216eaa739..0000000000
--- a/internal/eventstore/v1/models/aggregate_creator.go
+++ /dev/null
@@ -1,59 +0,0 @@
-package models
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/api/authz"
-)
-
-type AggregateCreator struct {
- serviceName string
-}
-
-func NewAggregateCreator(serviceName string) *AggregateCreator {
- return &AggregateCreator{serviceName: serviceName}
-}
-
-type option func(*Aggregate)
-
-func (c *AggregateCreator) NewAggregate(ctx context.Context, id string, typ AggregateType, version Version, previousSequence uint64, opts ...option) (*Aggregate, error) {
- ctxData := authz.GetCtxData(ctx)
- instance := authz.GetInstance(ctx)
- editorUser := ctxData.UserID
- resourceOwner := ctxData.OrgID
- instanceID := instance.InstanceID()
-
- aggregate := &Aggregate{
- ID: id,
- typ: typ,
- PreviousSequence: previousSequence,
- version: version,
- Events: make([]*Event, 0, 2),
- editorService: c.serviceName,
- editorUser: editorUser,
- resourceOwner: resourceOwner,
- instanceID: instanceID,
- }
-
- for _, opt := range opts {
- opt(aggregate)
- }
-
- if err := aggregate.Validate(); err != nil {
- return nil, err
- }
-
- return aggregate, nil
-}
-
-func OverwriteEditorUser(userID string) func(*Aggregate) {
- return func(a *Aggregate) {
- a.editorUser = userID
- }
-}
-
-func OverwriteResourceOwner(resourceOwner string) func(*Aggregate) {
- return func(a *Aggregate) {
- a.resourceOwner = resourceOwner
- }
-}
diff --git a/internal/eventstore/v1/models/aggregate_creator_test.go b/internal/eventstore/v1/models/aggregate_creator_test.go
deleted file mode 100644
index 114008f65d..0000000000
--- a/internal/eventstore/v1/models/aggregate_creator_test.go
+++ /dev/null
@@ -1,118 +0,0 @@
-package models
-
-import (
- "context"
- "reflect"
- "testing"
-)
-
-func TestAggregateCreator_NewAggregate(t *testing.T) {
- type args struct {
- ctx context.Context
- id string
- typ AggregateType
- version Version
- opts []option
- }
- tests := []struct {
- name string
- creator *AggregateCreator
- args args
- want *Aggregate
- wantErr bool
- }{
- {
- name: "no ctxdata and no options",
- creator: &AggregateCreator{serviceName: "admin"},
- wantErr: true,
- want: nil,
- args: args{
- ctx: context.Background(),
- id: "hodor",
- typ: "user",
- version: "v1.0.0",
- },
- },
- {
- name: "no id error",
- creator: &AggregateCreator{serviceName: "admin"},
- wantErr: true,
- want: nil,
- args: args{
- ctx: context.Background(),
- typ: "user",
- version: "v1.0.0",
- opts: []option{
- OverwriteEditorUser("hodor"),
- OverwriteResourceOwner("org"),
- },
- },
- },
- {
- name: "no type error",
- creator: &AggregateCreator{serviceName: "admin"},
- wantErr: true,
- want: nil,
- args: args{
- ctx: context.Background(),
- id: "hodor",
- version: "v1.0.0",
- opts: []option{
- OverwriteEditorUser("hodor"),
- OverwriteResourceOwner("org"),
- },
- },
- },
- {
- name: "invalid version error",
- creator: &AggregateCreator{serviceName: "admin"},
- wantErr: true,
- want: nil,
- args: args{
- ctx: context.Background(),
- id: "hodor",
- typ: "user",
- opts: []option{
- OverwriteEditorUser("hodor"),
- OverwriteResourceOwner("org"),
- },
- },
- },
- {
- name: "create ok",
- creator: &AggregateCreator{serviceName: "admin"},
- wantErr: false,
- want: &Aggregate{
- ID: "hodor",
- Events: make([]*Event, 0, 2),
- typ: "user",
- version: "v1.0.0",
- editorService: "admin",
- editorUser: "hodor",
- resourceOwner: "org",
- },
- args: args{
- ctx: context.Background(),
- id: "hodor",
- typ: "user",
- version: "v1.0.0",
- opts: []option{
- OverwriteEditorUser("hodor"),
- OverwriteResourceOwner("org"),
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got, err := tt.creator.NewAggregate(tt.args.ctx, tt.args.id, tt.args.typ, tt.args.version, 0, tt.args.opts...)
- if (err != nil) != tt.wantErr {
- t.Errorf("AggregateCreator.NewAggregate() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- if !reflect.DeepEqual(got, tt.want) {
- t.Errorf("AggregateCreator.NewAggregate() = %v, want %v", got, tt.want)
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/models/aggregate_test.go b/internal/eventstore/v1/models/aggregate_test.go
deleted file mode 100644
index 5c2c74059d..0000000000
--- a/internal/eventstore/v1/models/aggregate_test.go
+++ /dev/null
@@ -1,310 +0,0 @@
-package models
-
-import (
- "testing"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-func TestAggregate_AppendEvent(t *testing.T) {
- type fields struct {
- aggregate *Aggregate
- }
- type args struct {
- typ EventType
- payload interface{}
- }
- tests := []struct {
- name string
- fields fields
- args args
- want *Aggregate
- wantErr bool
- }{
- {
- name: "no event type error",
- fields: fields{aggregate: &Aggregate{}},
- args: args{},
- want: &Aggregate{},
- wantErr: true,
- },
- {
- name: "invalid payload error",
- fields: fields{aggregate: &Aggregate{}},
- args: args{typ: "user", payload: 134},
- want: &Aggregate{},
- wantErr: true,
- },
- {
- name: "event added",
- fields: fields{aggregate: &Aggregate{Events: []*Event{}}},
- args: args{typ: "user.deactivated"},
- want: &Aggregate{Events: []*Event{
- {Type: "user.deactivated"},
- }},
- wantErr: false,
- },
- {
- name: "event added",
- fields: fields{aggregate: &Aggregate{Events: []*Event{
- {},
- }}},
- args: args{typ: "user.deactivated"},
- want: &Aggregate{Events: []*Event{
- {},
- {Type: "user.deactivated"},
- }},
- wantErr: false,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got, err := tt.fields.aggregate.AppendEvent(tt.args.typ, tt.args.payload)
- if (err != nil) != tt.wantErr {
- t.Errorf("Aggregate.AppendEvent() error = %v, wantErr %v", err, tt.wantErr)
- return
- }
- if len(tt.fields.aggregate.Events) != len(got.Events) {
- t.Errorf("events len should be %d but was %d", len(tt.fields.aggregate.Events), len(got.Events))
- }
- })
- }
-}
-
-func TestAggregate_Validate(t *testing.T) {
- type fields struct {
- aggregate *Aggregate
- }
- tests := []struct {
- name string
- fields fields
- wantErr bool
- }{
- {
- name: "aggregate nil error",
- wantErr: true,
- },
- {
- name: "aggregate empty error",
- wantErr: true,
- fields: fields{aggregate: &Aggregate{}},
- },
- {
- name: "no id error",
- wantErr: true,
- fields: fields{aggregate: &Aggregate{
- typ: "user",
- version: "v1.0.0",
- editorService: "svc",
- editorUser: "hodor",
- resourceOwner: "org",
- PreviousSequence: 5,
- Events: []*Event{
- {
- AggregateType: "user",
- AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
- ResourceOwner: "org",
- Type: "born",
- }},
- }},
- },
- {
- name: "no type error",
- wantErr: true,
- fields: fields{aggregate: &Aggregate{
- ID: "aggID",
- version: "v1.0.0",
- editorService: "svc",
- editorUser: "hodor",
- resourceOwner: "org",
- PreviousSequence: 5,
- Events: []*Event{
- {
- AggregateID: "hodor",
- AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
- ResourceOwner: "org",
- Type: "born",
- }},
- }},
- },
- {
- name: "invalid version error",
- wantErr: true,
- fields: fields{aggregate: &Aggregate{
- ID: "aggID",
- typ: "user",
- editorService: "svc",
- editorUser: "hodor",
- resourceOwner: "org",
- PreviousSequence: 5,
- Events: []*Event{
- {
- AggregateID: "hodor",
- AggregateType: "user",
- EditorService: "management",
- EditorUser: "hodor",
- ResourceOwner: "org",
- Type: "born",
- }},
- }},
- },
- {
- name: "no query in precondition error",
- wantErr: true,
- fields: fields{aggregate: &Aggregate{
- ID: "aggID",
- typ: "user",
- version: "v1.0.0",
- editorService: "svc",
- editorUser: "hodor",
- resourceOwner: "org",
- PreviousSequence: 5,
- Precondition: &precondition{
- Validation: func(...*Event) error { return nil },
- },
- Events: []*Event{
- {
- AggregateID: "hodor",
- AggregateType: "user",
- AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
- ResourceOwner: "org",
- Type: "born",
- }},
- }},
- },
- {
- name: "no func in precondition error",
- wantErr: true,
- fields: fields{aggregate: &Aggregate{
- ID: "aggID",
- typ: "user",
- version: "v1.0.0",
- editorService: "svc",
- editorUser: "hodor",
- resourceOwner: "org",
- PreviousSequence: 5,
- Precondition: &precondition{
- Query: NewSearchQuery().AddQuery().AggregateIDFilter("hodor").SearchQuery(),
- },
- Events: []*Event{
- {
- AggregateID: "hodor",
- AggregateType: "user",
- AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
- ResourceOwner: "org",
- Type: "born",
- }},
- }},
- },
- {
- name: "validation without precondition ok",
- wantErr: false,
- fields: fields{aggregate: &Aggregate{
- ID: "aggID",
- typ: "user",
- version: "v1.0.0",
- editorService: "svc",
- editorUser: "hodor",
- resourceOwner: "org",
- PreviousSequence: 5,
- Events: []*Event{
- {
- AggregateID: "hodor",
- AggregateType: "user",
- AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
- ResourceOwner: "org",
- Type: "born",
- }},
- }},
- },
- {
- name: "validation with precondition ok",
- wantErr: false,
- fields: fields{aggregate: &Aggregate{
- ID: "aggID",
- typ: "user",
- version: "v1.0.0",
- editorService: "svc",
- editorUser: "hodor",
- resourceOwner: "org",
- PreviousSequence: 5,
- Precondition: &precondition{
- Validation: func(...*Event) error { return nil },
- Query: NewSearchQuery().AddQuery().AggregateIDFilter("hodor").SearchQuery(),
- },
- Events: []*Event{
- {
- AggregateID: "hodor",
- AggregateType: "user",
- AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
- ResourceOwner: "org",
- Type: "born",
- }},
- }},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- err := tt.fields.aggregate.Validate()
- if (err != nil) != tt.wantErr {
- t.Errorf("Aggregate.Validate() error = %v, wantErr %v", err, tt.wantErr)
- }
- if tt.wantErr && !errors.IsPreconditionFailed(err) {
- t.Errorf("error must extend precondition failed: %v", err)
- }
- })
- }
-}
-
-func TestAggregate_SetPrecondition(t *testing.T) {
- type fields struct {
- aggregate *Aggregate
- }
- type args struct {
- query *SearchQuery
- validateFunc func(...*Event) error
- }
- tests := []struct {
- name string
- fields fields
- args args
- want *Aggregate
- }{
- {
- name: "set precondition",
- fields: fields{aggregate: &Aggregate{}},
- args: args{
- query: &SearchQuery{},
- validateFunc: func(...*Event) error { return nil },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
-
- got := tt.fields.aggregate.SetPrecondition(tt.args.query, tt.args.validateFunc)
- if got.Precondition == nil {
- t.Error("precondition must not be nil")
- t.FailNow()
- }
- if got.Precondition.Query == nil {
- t.Error("query of precondition must not be nil")
- }
- if got.Precondition.Validation == nil {
- t.Error("precondition func must not be nil")
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/models/event.go b/internal/eventstore/v1/models/event.go
index 0f7a08a763..82f7d3f8e8 100644
--- a/internal/eventstore/v1/models/event.go
+++ b/internal/eventstore/v1/models/event.go
@@ -6,6 +6,7 @@ import (
"time"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
type EventType string
@@ -14,23 +15,85 @@ func (et EventType) String() string {
return string(et)
}
+var _ eventstore.Event = (*Event)(nil)
+
type Event struct {
ID string
- Sequence uint64
+ Seq uint64
+ Pos float64
CreationDate time.Time
- Type EventType
+ Typ eventstore.EventType
PreviousSequence uint64
Data []byte
AggregateID string
- AggregateType AggregateType
- AggregateVersion Version
- EditorService string
- EditorUser string
+ AggregateType eventstore.AggregateType
+ AggregateVersion eventstore.Version
+ Service string
+ User string
ResourceOwner string
InstanceID string
}
+// Aggregate implements [eventstore.Event]
+func (e *Event) Aggregate() *eventstore.Aggregate {
+ return &eventstore.Aggregate{
+ ID: e.AggregateID,
+ Type: e.AggregateType,
+ ResourceOwner: e.ResourceOwner,
+ InstanceID: e.InstanceID,
+ // Version: eventstore.Version(e.AggregateVersion),
+ }
+}
+
+// CreatedAt implements [eventstore.Event]
+func (e *Event) CreatedAt() time.Time {
+ return e.CreationDate
+}
+
+// DataAsBytes implements [eventstore.Event]
+func (e *Event) DataAsBytes() []byte {
+ return e.Data
+}
+
+// Unmarshal implements [eventstore.Event]
+func (e *Event) Unmarshal(ptr any) error {
+ if len(e.Data) == 0 {
+ return nil
+ }
+ return json.Unmarshal(e.Data, ptr)
+}
+
+// EditorService implements [eventstore.Event]
+func (e *Event) EditorService() string {
+ return e.Service
+}
+
+// Creator implements [eventstore.action]
+func (e *Event) Creator() string {
+ return e.User
+}
+
+// Sequence implements [eventstore.Event]
+func (e *Event) Sequence() uint64 {
+ return e.Seq
+}
+
+// Position implements [eventstore.Event]
+func (e *Event) Position() float64 {
+ return e.Pos
+}
+
+// Type implements [eventstore.action]
+func (e *Event) Type() eventstore.EventType {
+ return e.Typ
+}
+
+// Type implements [eventstore.action]
+func (e *Event) Revision() uint16 {
+ return 0
+}
+
func eventData(i interface{}) ([]byte, error) {
switch v := i.(type) {
case []byte:
@@ -63,7 +126,7 @@ func (e *Event) Validate() error {
if e == nil {
return errors.ThrowPreconditionFailed(nil, "MODEL-oEAG4", "event is nil")
}
- if string(e.Type) == "" {
+ if string(e.Typ) == "" {
return errors.ThrowPreconditionFailed(nil, "MODEL-R2sB0", "type not defined")
}
@@ -74,13 +137,12 @@ func (e *Event) Validate() error {
return errors.ThrowPreconditionFailed(nil, "MODEL-EzdyK", "aggregate type not set")
}
if err := e.AggregateVersion.Validate(); err != nil {
- return err
+ return errors.ThrowPreconditionFailed(err, "MODEL-KO71q", "version invalid")
}
-
- if e.EditorService == "" {
+ if e.Service == "" {
return errors.ThrowPreconditionFailed(nil, "MODEL-4Yqik", "editor service not set")
}
- if e.EditorUser == "" {
+ if e.User == "" {
return errors.ThrowPreconditionFailed(nil, "MODEL-L3NHO", "editor user not set")
}
if e.ResourceOwner == "" {
diff --git a/internal/eventstore/v1/models/event_test.go b/internal/eventstore/v1/models/event_test.go
index bcc26c88f5..6cd24a1672 100644
--- a/internal/eventstore/v1/models/event_test.go
+++ b/internal/eventstore/v1/models/event_test.go
@@ -95,10 +95,10 @@ func TestEvent_Validate(t *testing.T) {
fields: fields{event: &Event{
AggregateType: "user",
AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
+ Service: "management",
+ User: "hodor",
ResourceOwner: "org",
- Type: "born",
+ Typ: "born",
}},
wantErr: true,
},
@@ -107,10 +107,10 @@ func TestEvent_Validate(t *testing.T) {
fields: fields{event: &Event{
AggregateID: "hodor",
AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
+ Service: "management",
+ User: "hodor",
ResourceOwner: "org",
- Type: "born",
+ Typ: "born",
}},
wantErr: true,
},
@@ -119,10 +119,10 @@ func TestEvent_Validate(t *testing.T) {
fields: fields{event: &Event{
AggregateID: "hodor",
AggregateType: "user",
- EditorService: "management",
- EditorUser: "hodor",
+ Service: "management",
+ User: "hodor",
ResourceOwner: "org",
- Type: "born",
+ Typ: "born",
}},
wantErr: true,
},
@@ -132,9 +132,9 @@ func TestEvent_Validate(t *testing.T) {
AggregateID: "hodor",
AggregateType: "user",
AggregateVersion: "v1.0.0",
- EditorUser: "hodor",
+ User: "hodor",
ResourceOwner: "org",
- Type: "born",
+ Typ: "born",
}},
wantErr: true,
},
@@ -144,9 +144,9 @@ func TestEvent_Validate(t *testing.T) {
AggregateID: "hodor",
AggregateType: "user",
AggregateVersion: "v1.0.0",
- EditorService: "management",
+ Service: "management",
ResourceOwner: "org",
- Type: "born",
+ Typ: "born",
}},
wantErr: true,
},
@@ -156,9 +156,9 @@ func TestEvent_Validate(t *testing.T) {
AggregateID: "hodor",
AggregateType: "user",
AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
- Type: "born",
+ Service: "management",
+ User: "hodor",
+ Typ: "born",
}},
wantErr: true,
},
@@ -168,8 +168,8 @@ func TestEvent_Validate(t *testing.T) {
AggregateID: "hodor",
AggregateType: "user",
AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
+ Service: "management",
+ User: "hodor",
ResourceOwner: "org",
}},
wantErr: true,
@@ -180,10 +180,10 @@ func TestEvent_Validate(t *testing.T) {
AggregateID: "hodor",
AggregateType: "user",
AggregateVersion: "v1.0.0",
- EditorService: "management",
- EditorUser: "hodor",
+ Service: "management",
+ User: "hodor",
ResourceOwner: "org",
- Type: "born",
+ Typ: "born",
}},
wantErr: false,
},
diff --git a/internal/eventstore/v1/models/field.go b/internal/eventstore/v1/models/field.go
deleted file mode 100644
index 39435ed5f5..0000000000
--- a/internal/eventstore/v1/models/field.go
+++ /dev/null
@@ -1,15 +0,0 @@
-package models
-
-type Field int32
-
-const (
- Field_AggregateType Field = 1 + iota
- Field_AggregateID
- Field_LatestSequence
- Field_ResourceOwner
- Field_EditorService
- Field_EditorUser
- Field_EventType
- Field_CreationDate
- Field_InstanceID
-)
diff --git a/internal/eventstore/v1/models/filter.go b/internal/eventstore/v1/models/filter.go
deleted file mode 100644
index 5da8ed0402..0000000000
--- a/internal/eventstore/v1/models/filter.go
+++ /dev/null
@@ -1,46 +0,0 @@
-package models
-
-import (
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-type Filter struct {
- field Field
- value interface{}
- operation Operation
-}
-
-//NewFilter is used in tests. Use searchQuery.*Filter() instead
-func NewFilter(field Field, value interface{}, operation Operation) *Filter {
- return &Filter{
- field: field,
- value: value,
- operation: operation,
- }
-}
-
-func (f *Filter) GetField() Field {
- return f.field
-}
-func (f *Filter) GetOperation() Operation {
- return f.operation
-}
-func (f *Filter) GetValue() interface{} {
- return f.value
-}
-
-func (f *Filter) Validate() error {
- if f == nil {
- return errors.ThrowPreconditionFailed(nil, "MODEL-z6KcG", "filter is nil")
- }
- if f.field <= 0 {
- return errors.ThrowPreconditionFailed(nil, "MODEL-zw62U", "field not definded")
- }
- if f.value == nil {
- return errors.ThrowPreconditionFailed(nil, "MODEL-GJ9ct", "no value definded")
- }
- if f.operation <= 0 {
- return errors.ThrowPreconditionFailed(nil, "MODEL-RrQTy", "operation not definded")
- }
- return nil
-}
diff --git a/internal/eventstore/v1/models/filter_test.go b/internal/eventstore/v1/models/filter_test.go
deleted file mode 100644
index 5595121c2f..0000000000
--- a/internal/eventstore/v1/models/filter_test.go
+++ /dev/null
@@ -1,104 +0,0 @@
-package models
-
-import (
- "reflect"
- "testing"
-)
-
-func TestNewFilter(t *testing.T) {
- type args struct {
- field Field
- value interface{}
- operation Operation
- }
- tests := []struct {
- name string
- args args
- want *Filter
- }{
- {
- name: "aggregateID equals",
- args: args{
- field: Field_AggregateID,
- value: "hodor",
- operation: Operation_Equals,
- },
- want: &Filter{field: Field_AggregateID, operation: Operation_Equals, value: "hodor"},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if got := NewFilter(tt.args.field, tt.args.value, tt.args.operation); !reflect.DeepEqual(got, tt.want) {
- t.Errorf("NewFilter() = %v, want %v", got, tt.want)
- }
- })
- }
-}
-
-func TestFilter_Validate(t *testing.T) {
- type fields struct {
- field Field
- value interface{}
- operation Operation
- isNil bool
- }
- tests := []struct {
- name string
- fields fields
- wantErr bool
- }{
- {
- name: "correct filter",
- fields: fields{
- field: Field_LatestSequence,
- operation: Operation_Greater,
- value: uint64(235),
- },
- wantErr: false,
- },
- {
- name: "filter is nil",
- fields: fields{isNil: true},
- wantErr: true,
- },
- {
- name: "no field error",
- fields: fields{
- operation: Operation_Greater,
- value: uint64(235),
- },
- wantErr: true,
- },
- {
- name: "no value error",
- fields: fields{
- field: Field_LatestSequence,
- operation: Operation_Greater,
- },
- wantErr: true,
- },
- {
- name: "no operation error",
- fields: fields{
- field: Field_LatestSequence,
- value: uint64(235),
- },
- wantErr: true,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- var f *Filter
- if !tt.fields.isNil {
- f = &Filter{
- field: tt.fields.field,
- value: tt.fields.value,
- operation: tt.fields.operation,
- }
- }
- if err := f.Validate(); (err != nil) != tt.wantErr {
- t.Errorf("Filter.Validate() error = %v, wantErr %v", err, tt.wantErr)
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/models/object.go b/internal/eventstore/v1/models/object.go
index 3fcb050473..8cde68cfa8 100644
--- a/internal/eventstore/v1/models/object.go
+++ b/internal/eventstore/v1/models/object.go
@@ -2,6 +2,8 @@ package models
import (
"time"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
)
type ObjectRoot struct {
@@ -13,25 +15,25 @@ type ObjectRoot struct {
ChangeDate time.Time `json:"-"`
}
-func (o *ObjectRoot) AppendEvent(event *Event) {
+func (o *ObjectRoot) AppendEvent(event eventstore.Event) {
if o.AggregateID == "" {
- o.AggregateID = event.AggregateID
- } else if o.AggregateID != event.AggregateID {
+ o.AggregateID = event.Aggregate().ID
+ } else if o.AggregateID != event.Aggregate().ID {
return
}
if o.ResourceOwner == "" {
- o.ResourceOwner = event.ResourceOwner
+ o.ResourceOwner = event.Aggregate().ResourceOwner
}
if o.InstanceID == "" {
- o.InstanceID = event.InstanceID
+ o.InstanceID = event.Aggregate().InstanceID
}
- o.ChangeDate = event.CreationDate
+ o.ChangeDate = event.CreatedAt()
if o.CreationDate.IsZero() {
o.CreationDate = o.ChangeDate
}
- o.Sequence = event.Sequence
+ o.Sequence = event.Sequence()
}
func (o *ObjectRoot) IsZero() bool {
return o.AggregateID == ""
diff --git a/internal/eventstore/v1/models/object_test.go b/internal/eventstore/v1/models/object_test.go
index 9db230ce7b..153103c78c 100644
--- a/internal/eventstore/v1/models/object_test.go
+++ b/internal/eventstore/v1/models/object_test.go
@@ -27,7 +27,7 @@ func TestObjectRoot_AppendEvent(t *testing.T) {
args{
&Event{
AggregateID: "aggID",
- Sequence: 34555,
+ Seq: 34555,
CreationDate: time.Now(),
},
true,
@@ -44,7 +44,7 @@ func TestObjectRoot_AppendEvent(t *testing.T) {
args{
&Event{
AggregateID: "agg",
- Sequence: 34555425,
+ Seq: 34555425,
CreationDate: time.Now(),
PreviousSequence: 22,
},
@@ -70,8 +70,8 @@ func TestObjectRoot_AppendEvent(t *testing.T) {
t.Error("creationDate and changedate should differ")
}
}
- if o.Sequence != tt.args.event.Sequence {
- t.Errorf("sequence not equal to event: event: %d root: %d", tt.args.event.Sequence, o.Sequence)
+ if o.Sequence != tt.args.event.Seq {
+ t.Errorf("sequence not equal to event: event: %d root: %d", tt.args.event.Seq, o.Sequence)
}
if !o.ChangeDate.Equal(tt.args.event.CreationDate) {
t.Errorf("changedate should be equal to event creation date: event: %v root: %v", tt.args.event.CreationDate, o.ChangeDate)
diff --git a/internal/eventstore/v1/models/operation.go b/internal/eventstore/v1/models/operation.go
deleted file mode 100644
index dc3bb06967..0000000000
--- a/internal/eventstore/v1/models/operation.go
+++ /dev/null
@@ -1,11 +0,0 @@
-package models
-
-type Operation int32
-
-const (
- Operation_Equals Operation = 1 + iota
- Operation_Greater
- Operation_Less
- Operation_In
- Operation_NotIn
-)
diff --git a/internal/eventstore/v1/models/search_query.go b/internal/eventstore/v1/models/search_query.go
deleted file mode 100644
index ea8570ab02..0000000000
--- a/internal/eventstore/v1/models/search_query.go
+++ /dev/null
@@ -1,296 +0,0 @@
-package models
-
-import (
- "time"
-
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-type SearchQueryFactory struct {
- columns Columns
- limit uint64
- desc bool
- queries []*query
-
- InstanceFiltered bool
-}
-
-type query struct {
- desc bool
- aggregateTypes []AggregateType
- aggregateIDs []string
- sequenceFrom uint64
- sequenceTo uint64
- eventTypes []EventType
- resourceOwner string
- instanceID string
- ignoredInstanceIDs []string
- creationDate time.Time
- factory *SearchQueryFactory
-}
-
-type searchQuery struct {
- Columns Columns
- Limit uint64
- Desc bool
- Filters [][]*Filter
-}
-
-type Columns int32
-
-const (
- Columns_Event = iota
- Columns_Max_Sequence
- Columns_InstanceIDs
- // insert new columns-types before this columnsCount because count is needed for validation
- columnsCount
-)
-
-// FactoryFromSearchQuery is deprecated because it's for migration purposes. use NewSearchQueryFactory
-func FactoryFromSearchQuery(q *SearchQuery) *SearchQueryFactory {
- factory := &SearchQueryFactory{
- columns: q.Columns,
- desc: q.Desc,
- limit: q.Limit,
- queries: make([]*query, len(q.Queries)),
- }
-
- for i, qq := range q.Queries {
- factory.queries[i] = &query{factory: factory}
- for _, filter := range qq.Filters {
- switch filter.field {
- case Field_AggregateType:
- factory.queries[i] = factory.queries[i].aggregateTypesMig(filter.value.([]AggregateType)...)
- case Field_AggregateID:
- if aggregateID, ok := filter.value.(string); ok {
- factory.queries[i] = factory.queries[i].AggregateIDs(aggregateID)
- } else if aggregateIDs, ok := filter.value.([]string); ok {
- factory.queries[i] = factory.queries[i].AggregateIDs(aggregateIDs...)
- }
- case Field_LatestSequence:
- if filter.operation == Operation_Greater {
- factory.queries[i] = factory.queries[i].SequenceGreater(filter.value.(uint64))
- } else {
- factory.queries[i] = factory.queries[i].SequenceLess(filter.value.(uint64))
- }
- case Field_ResourceOwner:
- factory.queries[i] = factory.queries[i].ResourceOwner(filter.value.(string))
- case Field_InstanceID:
- factory.InstanceFiltered = true
- if filter.operation == Operation_Equals {
- factory.queries[i] = factory.queries[i].InstanceID(filter.value.(string))
- } else if filter.operation == Operation_NotIn {
- factory.queries[i] = factory.queries[i].IgnoredInstanceIDs(filter.value.([]string)...)
- }
- case Field_EventType:
- factory.queries[i] = factory.queries[i].EventTypes(filter.value.([]EventType)...)
- case Field_EditorService, Field_EditorUser:
- logging.WithFields("value", filter.value).Panic("field not converted to factory")
- case Field_CreationDate:
- factory.queries[i] = factory.queries[i].CreationDateNewer(filter.value.(time.Time))
- }
- }
- }
-
- return factory
-}
-
-func NewSearchQueryFactory() *SearchQueryFactory {
- return &SearchQueryFactory{}
-}
-
-func (factory *SearchQueryFactory) Columns(columns Columns) *SearchQueryFactory {
- factory.columns = columns
- return factory
-}
-
-func (factory *SearchQueryFactory) Limit(limit uint64) *SearchQueryFactory {
- factory.limit = limit
- return factory
-}
-
-func (factory *SearchQueryFactory) OrderDesc() *SearchQueryFactory {
- factory.desc = true
- return factory
-}
-
-func (factory *SearchQueryFactory) OrderAsc() *SearchQueryFactory {
- factory.desc = false
- return factory
-}
-
-func (factory *SearchQueryFactory) AddQuery() *query {
- q := &query{factory: factory}
- factory.queries = append(factory.queries, q)
- return q
-}
-
-func (q *query) Factory() *SearchQueryFactory {
- return q.factory
-}
-
-func (q *query) SequenceGreater(sequence uint64) *query {
- q.sequenceFrom = sequence
- return q
-}
-
-func (q *query) SequenceLess(sequence uint64) *query {
- q.sequenceTo = sequence
- return q
-}
-
-func (q *query) AggregateTypes(types ...AggregateType) *query {
- q.aggregateTypes = types
- return q
-}
-
-func (q *query) AggregateIDs(ids ...string) *query {
- q.aggregateIDs = ids
- return q
-}
-
-func (q *query) aggregateTypesMig(types ...AggregateType) *query {
- q.aggregateTypes = types
- return q
-}
-
-func (q *query) EventTypes(types ...EventType) *query {
- q.eventTypes = types
- return q
-}
-
-func (q *query) ResourceOwner(resourceOwner string) *query {
- q.resourceOwner = resourceOwner
- return q
-}
-
-func (q *query) InstanceID(instanceID string) *query {
- q.instanceID = instanceID
- return q
-}
-
-func (q *query) IgnoredInstanceIDs(instanceIDs ...string) *query {
- q.ignoredInstanceIDs = instanceIDs
- return q
-}
-
-func (q *query) CreationDateNewer(time time.Time) *query {
- q.creationDate = time
- return q
-}
-
-func (factory *SearchQueryFactory) Build() (*searchQuery, error) {
- if factory == nil ||
- len(factory.queries) < 1 ||
- (factory.columns < 0 || factory.columns >= columnsCount) {
- return nil, errors.ThrowPreconditionFailed(nil, "MODEL-tGAD3", "factory invalid")
- }
- filters := make([][]*Filter, len(factory.queries))
-
- for i, query := range factory.queries {
- for _, f := range []func() *Filter{
- query.aggregateTypeFilter,
- query.aggregateIDFilter,
- query.sequenceFromFilter,
- query.sequenceToFilter,
- query.eventTypeFilter,
- query.resourceOwnerFilter,
- query.instanceIDFilter,
- query.ignoredInstanceIDsFilter,
- query.creationDateNewerFilter,
- } {
- if filter := f(); filter != nil {
- filters[i] = append(filters[i], filter)
- }
- }
- }
-
- return &searchQuery{
- Columns: factory.columns,
- Limit: factory.limit,
- Desc: factory.desc,
- Filters: filters,
- }, nil
-}
-
-func (q *query) aggregateIDFilter() *Filter {
- if len(q.aggregateIDs) < 1 {
- return nil
- }
- if len(q.aggregateIDs) == 1 {
- return NewFilter(Field_AggregateID, q.aggregateIDs[0], Operation_Equals)
- }
- return NewFilter(Field_AggregateID, q.aggregateIDs, Operation_In)
-}
-
-func (q *query) eventTypeFilter() *Filter {
- if len(q.eventTypes) < 1 {
- return nil
- }
- if len(q.eventTypes) == 1 {
- return NewFilter(Field_EventType, q.eventTypes[0], Operation_Equals)
- }
- return NewFilter(Field_EventType, q.eventTypes, Operation_In)
-}
-
-func (q *query) aggregateTypeFilter() *Filter {
- if len(q.aggregateTypes) < 1 {
- return nil
- }
- if len(q.aggregateTypes) == 1 {
- return NewFilter(Field_AggregateType, q.aggregateTypes[0], Operation_Equals)
- }
- return NewFilter(Field_AggregateType, q.aggregateTypes, Operation_In)
-}
-
-func (q *query) sequenceFromFilter() *Filter {
- if q.sequenceFrom == 0 {
- return nil
- }
- sortOrder := Operation_Greater
- if q.factory.desc {
- sortOrder = Operation_Less
- }
- return NewFilter(Field_LatestSequence, q.sequenceFrom, sortOrder)
-}
-
-func (q *query) sequenceToFilter() *Filter {
- if q.sequenceTo == 0 {
- return nil
- }
- sortOrder := Operation_Less
- if q.factory.desc {
- sortOrder = Operation_Greater
- }
- return NewFilter(Field_LatestSequence, q.sequenceTo, sortOrder)
-}
-
-func (q *query) resourceOwnerFilter() *Filter {
- if q.resourceOwner == "" {
- return nil
- }
- return NewFilter(Field_ResourceOwner, q.resourceOwner, Operation_Equals)
-}
-
-func (q *query) instanceIDFilter() *Filter {
- if q.instanceID == "" {
- return nil
- }
- return NewFilter(Field_InstanceID, q.instanceID, Operation_Equals)
-}
-
-func (q *query) ignoredInstanceIDsFilter() *Filter {
- if len(q.ignoredInstanceIDs) == 0 {
- return nil
- }
- return NewFilter(Field_InstanceID, q.ignoredInstanceIDs, Operation_NotIn)
-}
-
-func (q *query) creationDateNewerFilter() *Filter {
- if q.creationDate.IsZero() {
- return nil
- }
- return NewFilter(Field_CreationDate, q.creationDate, Operation_Greater)
-}
diff --git a/internal/eventstore/v1/models/search_query_old.go b/internal/eventstore/v1/models/search_query_old.go
deleted file mode 100644
index eed8da3ce7..0000000000
--- a/internal/eventstore/v1/models/search_query_old.go
+++ /dev/null
@@ -1,148 +0,0 @@
-package models
-
-import (
- "time"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-//SearchQuery is deprecated. Use SearchQueryFactory
-type SearchQuery struct {
- Columns Columns
- Limit uint64
- Desc bool
- Filters []*Filter
- Queries []*Query
-}
-
-type Query struct {
- searchQuery *SearchQuery
- Filters []*Filter
-}
-
-//NewSearchQuery is deprecated. Use SearchQueryFactory
-func NewSearchQuery() *SearchQuery {
- return &SearchQuery{
- Filters: make([]*Filter, 0, 4),
- Queries: make([]*Query, 0),
- }
-}
-
-func (q *SearchQuery) SetColumn(columns Columns) *SearchQuery {
- q.Columns = columns
- return q
-}
-
-func (q *SearchQuery) AddQuery() *Query {
- query := &Query{
- searchQuery: q,
- }
- q.Queries = append(q.Queries, query)
-
- return query
-}
-
-//SearchQuery returns the SearchQuery of the sub query
-func (q *Query) SearchQuery() *SearchQuery {
- return q.searchQuery
-}
-func (q *Query) setFilter(filter *Filter) *Query {
- for i, f := range q.Filters {
- if f.field == filter.field && f.field != Field_LatestSequence {
- q.Filters[i] = filter
- return q
- }
- }
- q.Filters = append(q.Filters, filter)
- return q
-}
-
-func (q *SearchQuery) SetLimit(limit uint64) *SearchQuery {
- q.Limit = limit
- return q
-}
-
-func (q *SearchQuery) OrderDesc() *SearchQuery {
- q.Desc = true
- return q
-}
-
-func (q *SearchQuery) OrderAsc() *SearchQuery {
- q.Desc = false
- return q
-}
-
-func (q *Query) AggregateIDFilter(id string) *Query {
- return q.setFilter(NewFilter(Field_AggregateID, id, Operation_Equals))
-}
-
-func (q *Query) AggregateIDsFilter(ids ...string) *Query {
- return q.setFilter(NewFilter(Field_AggregateID, ids, Operation_In))
-}
-
-func (q *Query) AggregateTypeFilter(types ...AggregateType) *Query {
- return q.setFilter(NewFilter(Field_AggregateType, types, Operation_In))
-}
-
-func (q *Query) EventTypesFilter(types ...EventType) *Query {
- return q.setFilter(NewFilter(Field_EventType, types, Operation_In))
-}
-
-func (q *Query) LatestSequenceFilter(sequence uint64) *Query {
- if sequence == 0 {
- return q
- }
- sortOrder := Operation_Greater
- return q.setFilter(NewFilter(Field_LatestSequence, sequence, sortOrder))
-}
-
-func (q *Query) SequenceBetween(from, to uint64) *Query {
- q.setFilter(NewFilter(Field_LatestSequence, from, Operation_Greater))
- q.setFilter(NewFilter(Field_LatestSequence, to, Operation_Less))
- return q
-}
-
-func (q *Query) ResourceOwnerFilter(resourceOwner string) *Query {
- return q.setFilter(NewFilter(Field_ResourceOwner, resourceOwner, Operation_Equals))
-}
-
-func (q *Query) InstanceIDFilter(instanceID string) *Query {
- return q.setFilter(NewFilter(Field_InstanceID, instanceID, Operation_Equals))
-}
-
-func (q *Query) ExcludedInstanceIDsFilter(instanceIDs ...string) *Query {
- return q.setFilter(NewFilter(Field_InstanceID, instanceIDs, Operation_NotIn))
-}
-
-func (q *Query) CreationDateNewerFilter(time time.Time) *Query {
- return q.setFilter(NewFilter(Field_CreationDate, time, Operation_Greater))
-}
-
-func (q *SearchQuery) setFilter(filter *Filter) *SearchQuery {
- for i, f := range q.Filters {
- if f.field == filter.field && f.field != Field_LatestSequence {
- q.Filters[i] = filter
- return q
- }
- }
- q.Filters = append(q.Filters, filter)
- return q
-}
-
-func (q *SearchQuery) Validate() error {
- if q == nil {
- return errors.ThrowPreconditionFailed(nil, "MODEL-J5xQi", "search query is nil")
- }
- if len(q.Queries) == 0 {
- return errors.ThrowPreconditionFailed(nil, "MODEL-pF3DR", "no filters set")
- }
- for _, query := range q.Queries {
- for _, filter := range query.Filters {
- if err := filter.Validate(); err != nil {
- return err
- }
- }
- }
-
- return nil
-}
diff --git a/internal/eventstore/v1/models/search_query_old_test.go b/internal/eventstore/v1/models/search_query_old_test.go
deleted file mode 100644
index 1736f61318..0000000000
--- a/internal/eventstore/v1/models/search_query_old_test.go
+++ /dev/null
@@ -1,65 +0,0 @@
-package models
-
-import (
- "reflect"
- "testing"
-)
-
-func TestSearchQuery_setFilter(t *testing.T) {
- type fields struct {
- query *SearchQuery
- }
- type args struct {
- filters []*Filter
- }
- tests := []struct {
- name string
- fields fields
- args args
- want *SearchQuery
- }{
- {
- name: "set idFilter",
- fields: fields{query: NewSearchQuery()},
- args: args{filters: []*Filter{
- {field: Field_AggregateID, operation: Operation_Equals, value: "hodor"},
- }},
- want: &SearchQuery{Filters: []*Filter{
- {field: Field_AggregateID, operation: Operation_Equals, value: "hodor"},
- }},
- },
- {
- name: "overwrite idFilter",
- fields: fields{query: NewSearchQuery()},
- args: args{filters: []*Filter{
- {field: Field_AggregateID, operation: Operation_Equals, value: "hodor"},
- {field: Field_AggregateID, operation: Operation_Equals, value: "ursli"},
- }},
- want: &SearchQuery{Filters: []*Filter{
- {field: Field_AggregateID, operation: Operation_Equals, value: "ursli"},
- }},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got := tt.fields.query
- for _, filter := range tt.args.filters {
- got = got.setFilter(filter)
- }
- for _, wantFilter := range tt.want.Filters {
- found := false
- for _, gotFilter := range got.Filters {
- if gotFilter.field == wantFilter.field {
- found = true
- if !reflect.DeepEqual(wantFilter, gotFilter) {
- t.Errorf("filter not as expected: want: %v got %v", wantFilter, gotFilter)
- }
- }
- }
- if !found {
- t.Errorf("filter field %v not found", wantFilter.field)
- }
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/models/search_query_test.go b/internal/eventstore/v1/models/search_query_test.go
deleted file mode 100644
index 9abd199371..0000000000
--- a/internal/eventstore/v1/models/search_query_test.go
+++ /dev/null
@@ -1,590 +0,0 @@
-package models
-
-import (
- "reflect"
- "testing"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-func testSetColumns(columns Columns) func(factory *SearchQueryFactory) *SearchQueryFactory {
- return func(factory *SearchQueryFactory) *SearchQueryFactory {
- factory = factory.Columns(columns)
- return factory
- }
-}
-
-func testSetLimit(limit uint64) func(factory *SearchQueryFactory) *SearchQueryFactory {
- return func(factory *SearchQueryFactory) *SearchQueryFactory {
- factory = factory.Limit(limit)
- return factory
- }
-}
-
-func testAddQuery(queryFuncs ...func(*query) *query) func(*SearchQueryFactory) *SearchQueryFactory {
- return func(builder *SearchQueryFactory) *SearchQueryFactory {
- query := builder.AddQuery()
- for _, queryFunc := range queryFuncs {
- queryFunc(query)
- }
- return query.Factory()
- }
-}
-
-func testSetSequence(sequence uint64) func(*query) *query {
- return func(q *query) *query {
- q.SequenceGreater(sequence)
- return q
- }
-}
-
-func testSetAggregateIDs(aggregateIDs ...string) func(*query) *query {
- return func(q *query) *query {
- q.AggregateIDs(aggregateIDs...)
- return q
- }
-}
-
-func testSetAggregateTypes(aggregateTypes ...AggregateType) func(*query) *query {
- return func(q *query) *query {
- q.AggregateTypes(aggregateTypes...)
- return q
- }
-}
-
-func testSetEventTypes(eventTypes ...EventType) func(*query) *query {
- return func(q *query) *query {
- q.EventTypes(eventTypes...)
- return q
- }
-}
-
-func testSetResourceOwner(resourceOwner string) func(*query) *query {
- return func(q *query) *query {
- q.ResourceOwner(resourceOwner)
- return q
- }
-}
-
-func testSetSortOrder(asc bool) func(factory *SearchQueryFactory) *SearchQueryFactory {
- return func(factory *SearchQueryFactory) *SearchQueryFactory {
- if asc {
- factory = factory.OrderAsc()
- } else {
- factory = factory.OrderDesc()
- }
- return factory
- }
-}
-
-func assertFactory(t *testing.T, want, got *SearchQueryFactory) {
- t.Helper()
-
- if got.columns != want.columns {
- t.Errorf("wrong column: got: %v want: %v", got.columns, want.columns)
- }
- if got.desc != want.desc {
- t.Errorf("wrong desc: got: %v want: %v", got.desc, want.desc)
- }
- if got.limit != want.limit {
- t.Errorf("wrong limit: got: %v want: %v", got.limit, want.limit)
- }
- if len(got.queries) != len(want.queries) {
- t.Errorf("wrong length of queries: got: %v want: %v", len(got.queries), len(want.queries))
- }
-
- for i, query := range got.queries {
- assertQuery(t, i, want.queries[i], query)
- }
-}
-
-func assertQuery(t *testing.T, i int, want, got *query) {
- t.Helper()
-
- if !reflect.DeepEqual(got.aggregateIDs, want.aggregateIDs) {
- t.Errorf("wrong aggregateIDs in query %d : got: %v want: %v", i, got.aggregateIDs, want.aggregateIDs)
- }
- if !reflect.DeepEqual(got.aggregateTypes, want.aggregateTypes) {
- t.Errorf("wrong aggregateTypes in query %d : got: %v want: %v", i, got.aggregateTypes, want.aggregateTypes)
- }
- if got.sequenceFrom != want.sequenceFrom {
- t.Errorf("wrong sequenceFrom in query %d : got: %v want: %v", i, got.sequenceFrom, want.sequenceFrom)
- }
- if got.sequenceTo != want.sequenceTo {
- t.Errorf("wrong sequenceTo in query %d : got: %v want: %v", i, got.sequenceTo, want.sequenceTo)
- }
- if !reflect.DeepEqual(got.eventTypes, want.eventTypes) {
- t.Errorf("wrong eventTypes in query %d : got: %v want: %v", i, got.eventTypes, want.eventTypes)
- }
-}
-
-func TestSearchQueryFactorySetters(t *testing.T) {
- type args struct {
- setters []func(*SearchQueryFactory) *SearchQueryFactory
- }
- tests := []struct {
- name string
- args args
- res *SearchQueryFactory
- }{
- {
- name: "New factory",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{},
- },
- res: &SearchQueryFactory{},
- },
- {
- name: "set columns",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testSetColumns(Columns_Max_Sequence)},
- },
- res: &SearchQueryFactory{
- columns: Columns_Max_Sequence,
- },
- },
- {
- name: "set limit",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testSetLimit(100)},
- },
- res: &SearchQueryFactory{
- limit: 100,
- },
- },
- {
- name: "set sequence",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testAddQuery(testSetSequence(90))},
- },
- res: &SearchQueryFactory{
- queries: []*query{
- {
- sequenceFrom: 90,
- },
- },
- },
- },
- {
- name: "set aggregateTypes",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testAddQuery(testSetAggregateTypes("user", "org"))},
- },
- res: &SearchQueryFactory{
- queries: []*query{
- {
- aggregateTypes: []AggregateType{"user", "org"},
- },
- },
- },
- },
- {
- name: "set aggregateIDs",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testAddQuery(testSetAggregateIDs("1235", "09824"))},
- },
- res: &SearchQueryFactory{
- queries: []*query{
- {
- aggregateIDs: []string{"1235", "09824"},
- },
- },
- },
- },
- {
- name: "set eventTypes",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testAddQuery(testSetEventTypes("user.created", "user.updated"))},
- },
- res: &SearchQueryFactory{
- queries: []*query{
- {
- eventTypes: []EventType{"user.created", "user.updated"},
- },
- },
- },
- },
- {
- name: "set resource owner",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testAddQuery(testSetResourceOwner("hodor"))},
- },
- res: &SearchQueryFactory{
- queries: []*query{
- {
- resourceOwner: "hodor",
- },
- },
- },
- },
- {
- name: "default search query",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{testAddQuery(testSetAggregateTypes("user"), testSetAggregateIDs("1235", "024")), testSetSortOrder(false)},
- },
- res: &SearchQueryFactory{
- desc: true,
- queries: []*query{
- {
- aggregateTypes: []AggregateType{"user"},
- aggregateIDs: []string{"1235", "024"},
- },
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- factory := NewSearchQueryFactory()
- for _, setter := range tt.args.setters {
- factory = setter(factory)
- }
- assertFactory(t, tt.res, factory)
- })
- }
-}
-
-func TestSearchQueryFactoryBuild(t *testing.T) {
- type args struct {
- setters []func(*SearchQueryFactory) *SearchQueryFactory
- }
- type res struct {
- isErr func(err error) bool
- query *searchQuery
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "no aggregate types",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{},
- },
- res: res{
- isErr: errors.IsPreconditionFailed,
- query: nil,
- },
- },
- {
- name: "invalid column (too low)",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testSetColumns(Columns(-1)),
- testAddQuery(testSetAggregateTypes("user")),
- },
- },
- res: res{
- isErr: errors.IsPreconditionFailed,
- },
- },
- {
- name: "invalid column (too high)",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testSetColumns(columnsCount),
- testAddQuery(testSetAggregateTypes("user")),
- },
- },
- res: res{
- isErr: errors.IsPreconditionFailed,
- },
- },
- {
- name: "filter aggregate type",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(testSetAggregateTypes("user")),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate types",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(testSetAggregateTypes("user", "org")),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, []AggregateType{"user", "org"}, Operation_In),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type, limit, desc",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testSetLimit(5),
- testSetSortOrder(false),
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetSequence(100),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: true,
- Limit: 5,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_LatestSequence, uint64(100), Operation_Less),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type, limit, asc",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testSetLimit(5),
- testSetSortOrder(true),
- testAddQuery(
- testSetSequence(100),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 5,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_LatestSequence, uint64(100), Operation_Greater),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type, limit, desc, max event sequence cols",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testSetLimit(5),
- testSetSortOrder(false),
- testSetColumns(Columns_Max_Sequence),
- testAddQuery(
- testSetSequence(100),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: Columns_Max_Sequence,
- Desc: true,
- Limit: 5,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_LatestSequence, uint64(100), Operation_Less),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and aggregate id",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(
- testSetAggregateIDs("1234"),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_AggregateID, "1234", Operation_Equals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and aggregate ids",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(
- testSetAggregateIDs("1234", "0815"),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_AggregateID, []string{"1234", "0815"}, Operation_In),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and sequence greater",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(
- testSetSequence(8),
- testSetAggregateTypes("user"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_LatestSequence, uint64(8), Operation_Greater),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and event type",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetEventTypes("user.created"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_EventType, EventType("user.created"), Operation_Equals),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type and event types",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetEventTypes("user.created", "user.changed"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_EventType, []EventType{"user.created", "user.changed"}, Operation_In),
- },
- },
- },
- },
- },
- {
- name: "filter aggregate type resource owner",
- args: args{
- setters: []func(*SearchQueryFactory) *SearchQueryFactory{
- testAddQuery(
- testSetAggregateTypes("user"),
- testSetResourceOwner("hodor"),
- ),
- },
- },
- res: res{
- isErr: nil,
- query: &searchQuery{
- Columns: 0,
- Desc: false,
- Limit: 0,
- Filters: [][]*Filter{
- {
- NewFilter(Field_AggregateType, AggregateType("user"), Operation_Equals),
- NewFilter(Field_ResourceOwner, "hodor", Operation_Equals),
- },
- },
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- factory := NewSearchQueryFactory()
- for _, f := range tt.args.setters {
- factory = f(factory)
- }
- query, err := factory.Build()
- if tt.res.isErr != nil && !tt.res.isErr(err) {
- t.Errorf("wrong error: %v", err)
- return
- }
- if err != nil && tt.res.isErr == nil {
- t.Errorf("no error expected: %v", err)
- return
- }
-
- if !reflect.DeepEqual(query, tt.res.query) {
- t.Errorf("NewSearchQueryFactory() = %v, want %v", factory, tt.res)
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/models/version.go b/internal/eventstore/v1/models/version.go
deleted file mode 100644
index 3fba9a5340..0000000000
--- a/internal/eventstore/v1/models/version.go
+++ /dev/null
@@ -1,22 +0,0 @@
-package models
-
-import (
- "regexp"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-var versionRegexp = regexp.MustCompile(`^v[0-9]+(\.[0-9]+){0,2}$`)
-
-type Version string
-
-func (v Version) Validate() error {
- if !versionRegexp.MatchString(string(v)) {
- return errors.ThrowPreconditionFailed(nil, "MODEL-luDuS", "version is not semver")
- }
- return nil
-}
-
-func (v Version) String() string {
- return string(v)
-}
diff --git a/internal/eventstore/v1/models/version_test.go b/internal/eventstore/v1/models/version_test.go
deleted file mode 100644
index fe8a2fe4ba..0000000000
--- a/internal/eventstore/v1/models/version_test.go
+++ /dev/null
@@ -1,39 +0,0 @@
-package models
-
-import "testing"
-
-func TestVersion_Validate(t *testing.T) {
- tests := []struct {
- name string
- v Version
- wantErr bool
- }{
- {
- "correct version",
- "v1.23.23",
- false,
- },
- {
- "no v prefix",
- "1.2.2",
- true,
- },
- {
- "letters in version",
- "v1.as.3",
- true,
- },
- {
- "no version",
- "",
- true,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if err := tt.v.Validate(); (err != nil) != tt.wantErr {
- t.Errorf("Version.Validate() error = %v, wantErr %v", err, tt.wantErr)
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/query/handler.go b/internal/eventstore/v1/query/handler.go
deleted file mode 100755
index 384d5206f6..0000000000
--- a/internal/eventstore/v1/query/handler.go
+++ /dev/null
@@ -1,93 +0,0 @@
-package query
-
-import (
- "context"
- "runtime/debug"
- "time"
-
- "github.com/zitadel/logging"
-
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-const (
- eventLimit = 10000
-)
-
-type Handler interface {
- ViewModel() string
- EventQuery(ctx context.Context, instanceIDs []string) (*models.SearchQuery, error)
- Reduce(*models.Event) error
- OnError(event *models.Event, err error) error
- OnSuccess(instanceIDs []string) error
- MinimumCycleDuration() time.Duration
- LockDuration() time.Duration
- QueryLimit() uint64
-
- AggregateTypes() []models.AggregateType
- CurrentSequence(ctx context.Context, instanceID string) (uint64, error)
- Eventstore() v1.Eventstore
-
- Subscription() *v1.Subscription
-}
-
-func ReduceEvent(ctx context.Context, handler Handler, event *models.Event) {
- defer func() {
- err := recover()
-
- if err != nil {
- handler.Subscription().Unsubscribe()
- logging.WithFields(
- "cause", err,
- "stack", string(debug.Stack()),
- "sequence", event.Sequence,
- "instance", event.InstanceID,
- ).Error("reduce panicked")
- }
- }()
- currentSequence, err := handler.CurrentSequence(ctx, event.InstanceID)
- if err != nil {
- logging.WithError(err).Warn("unable to get current sequence")
- return
- }
-
- searchQuery := models.NewSearchQuery().
- AddQuery().
- AggregateTypeFilter(handler.AggregateTypes()...).
- SequenceBetween(currentSequence, event.Sequence).
- InstanceIDFilter(event.InstanceID).
- SearchQuery().
- SetLimit(eventLimit)
-
- unprocessedEvents, err := handler.Eventstore().FilterEvents(ctx, searchQuery)
- if err != nil {
- logging.WithFields("sequence", event.Sequence).Warn("filter failed")
- return
- }
-
- for _, unprocessedEvent := range unprocessedEvents {
- currentSequence, err := handler.CurrentSequence(ctx, unprocessedEvent.InstanceID)
- if err != nil {
- logging.WithError(err).Warn("unable to get current sequence")
- return
- }
- if unprocessedEvent.Sequence < currentSequence {
- logging.WithFields(
- "unprocessed", unprocessedEvent.Sequence,
- "current", currentSequence,
- "view", handler.ViewModel()).
- Warn("sequence not matching")
- return
- }
-
- err = handler.Reduce(unprocessedEvent)
- logging.WithFields("sequence", unprocessedEvent.Sequence).OnError(err).Warn("reduce failed")
- }
- if len(unprocessedEvents) == eventLimit {
- logging.WithFields("sequence", event.Sequence).Warn("didnt process event")
- return
- }
- err = handler.Reduce(event)
- logging.WithFields("sequence", event.Sequence).OnError(err).Warn("reduce failed")
-}
diff --git a/internal/eventstore/v1/sdk/append_event_error.go b/internal/eventstore/v1/sdk/append_event_error.go
deleted file mode 100644
index f70b34e70d..0000000000
--- a/internal/eventstore/v1/sdk/append_event_error.go
+++ /dev/null
@@ -1,36 +0,0 @@
-package sdk
-
-import (
- "fmt"
-
- "github.com/zitadel/zitadel/internal/errors"
-)
-
-var (
- _ AppendEventError = (*appendEventError)(nil)
- _ errors.Error = (*appendEventError)(nil)
-)
-
-type AppendEventError interface {
- error
- IsAppendEventError()
-}
-
-type appendEventError struct {
- *errors.CaosError
-}
-
-func ThrowAppendEventError(parent error, id, message string) error {
- return &appendEventError{errors.CreateCaosError(parent, id, message)}
-}
-
-func ThrowAggregaterf(parent error, id, format string, a ...interface{}) error {
- return ThrowAppendEventError(parent, id, fmt.Sprintf(format, a...))
-}
-
-func (err *appendEventError) IsAppendEventError() {}
-
-func IsAppendEventError(err error) bool {
- _, ok := err.(AppendEventError)
- return ok
-}
diff --git a/internal/eventstore/v1/sdk/append_event_error_test.go b/internal/eventstore/v1/sdk/append_event_error_test.go
deleted file mode 100644
index cb1c67cd2c..0000000000
--- a/internal/eventstore/v1/sdk/append_event_error_test.go
+++ /dev/null
@@ -1,31 +0,0 @@
-package sdk
-
-import (
- "errors"
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestAppendEventError(t *testing.T) {
- var err interface{}
- err = new(appendEventError)
- _, ok := err.(*appendEventError)
- assert.True(t, ok)
-}
-
-func TestThrowAppendEventErrorf(t *testing.T) {
- err := ThrowAggregaterf(nil, "id", "msg")
- _, ok := err.(*appendEventError)
- assert.True(t, ok)
-}
-
-func TestIsAppendEventError(t *testing.T) {
- err := ThrowAppendEventError(nil, "id", "msg")
- ok := IsAppendEventError(err)
- assert.True(t, ok)
-
- err = errors.New("i am found")
- ok = IsAppendEventError(err)
- assert.False(t, ok)
-}
diff --git a/internal/eventstore/v1/sdk/sdk.go b/internal/eventstore/v1/sdk/sdk.go
deleted file mode 100644
index 0bca758935..0000000000
--- a/internal/eventstore/v1/sdk/sdk.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package sdk
-
-import (
- "context"
-
- "github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-type filterFunc func(context.Context, *es_models.SearchQuery) ([]*es_models.Event, error)
-type appendFunc func(...*es_models.Event) error
-type AggregateFunc func(context.Context) (*es_models.Aggregate, error)
-
-func Filter(ctx context.Context, filter filterFunc, appender appendFunc, query *es_models.SearchQuery) error {
- events, err := filter(ctx, query)
- if err != nil {
- return err
- }
- if len(events) == 0 {
- return errors.ThrowNotFound(nil, "EVENT-8due3", "no events found")
- }
- err = appender(events...)
- if err != nil {
- return ThrowAppendEventError(err, "SDK-awiWK", "Errors.Internal")
- }
- return nil
-}
diff --git a/internal/eventstore/v1/sdk/sdk_test.go b/internal/eventstore/v1/sdk/sdk_test.go
deleted file mode 100644
index 01a41e5205..0000000000
--- a/internal/eventstore/v1/sdk/sdk_test.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package sdk
-
-import (
- "context"
- "testing"
-
- "github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-func TestFilter(t *testing.T) {
- type args struct {
- filter filterFunc
- appender appendFunc
- }
- tests := []struct {
- name string
- args args
- wantErr func(error) bool
- }{
- {
- name: "filter error",
- args: args{
- filter: func(context.Context, *es_models.SearchQuery) ([]*es_models.Event, error) {
- return nil, errors.ThrowInternal(nil, "test-46VX2", "test error")
- },
- appender: nil,
- },
- wantErr: errors.IsInternal,
- },
- {
- name: "no events found",
- args: args{
- filter: func(context.Context, *es_models.SearchQuery) ([]*es_models.Event, error) {
- return []*es_models.Event{}, nil
- },
- appender: nil,
- },
- wantErr: errors.IsNotFound,
- },
- {
- name: "append fails",
- args: args{
- filter: func(context.Context, *es_models.SearchQuery) ([]*es_models.Event, error) {
- return []*es_models.Event{&es_models.Event{}}, nil
- },
- appender: func(...*es_models.Event) error {
- return errors.ThrowInvalidArgument(nil, "SDK-DhBzl", "test error")
- },
- },
- wantErr: IsAppendEventError,
- },
- {
- name: "filter correct",
- args: args{
- filter: func(context.Context, *es_models.SearchQuery) ([]*es_models.Event, error) {
- return []*es_models.Event{&es_models.Event{}}, nil
- },
- appender: func(...*es_models.Event) error {
- return nil
- },
- },
- wantErr: nil,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- err := Filter(context.Background(), tt.args.filter, tt.args.appender, nil)
- if tt.wantErr == nil && err != nil {
- t.Errorf("no error expected %v", err)
- }
- if tt.wantErr != nil && !tt.wantErr(err) {
- t.Errorf("no error has wrong type %v", err)
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/spooler/config.go b/internal/eventstore/v1/spooler/config.go
deleted file mode 100644
index 92f2de1299..0000000000
--- a/internal/eventstore/v1/spooler/config.go
+++ /dev/null
@@ -1,42 +0,0 @@
-package spooler
-
-import (
- "math/rand"
-
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- "github.com/zitadel/zitadel/internal/id"
-)
-
-type Config struct {
- Eventstore v1.Eventstore
- EventstoreV2 *eventstore.Eventstore
- Locker Locker
- ViewHandlers []query.Handler
- ConcurrentWorkers int
- ConcurrentInstances int
-}
-
-func (c *Config) New() *Spooler {
- lockID, err := id.SonyFlakeGenerator().Next()
- logging.OnError(err).Panic("unable to generate lockID")
-
- //shuffle the handlers for better balance when running multiple pods
- rand.Shuffle(len(c.ViewHandlers), func(i, j int) {
- c.ViewHandlers[i], c.ViewHandlers[j] = c.ViewHandlers[j], c.ViewHandlers[i]
- })
-
- return &Spooler{
- handlers: c.ViewHandlers,
- lockID: lockID,
- eventstore: c.Eventstore,
- esV2: c.EventstoreV2,
- locker: c.Locker,
- queue: make(chan *spooledHandler, len(c.ViewHandlers)),
- workers: c.ConcurrentWorkers,
- concurrentInstances: c.ConcurrentInstances,
- }
-}
diff --git a/internal/eventstore/v1/spooler/mock.go b/internal/eventstore/v1/spooler/mock.go
deleted file mode 100644
index 04c449aa9e..0000000000
--- a/internal/eventstore/v1/spooler/mock.go
+++ /dev/null
@@ -1,3 +0,0 @@
-package spooler
-
-//go:generate mockgen -source spooler.go -destination ./mock/spooler.go -package mock
diff --git a/internal/eventstore/v1/spooler/mock/spooler.go b/internal/eventstore/v1/spooler/mock/spooler.go
deleted file mode 100644
index c0e3cb224d..0000000000
--- a/internal/eventstore/v1/spooler/mock/spooler.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Code generated by MockGen. DO NOT EDIT.
-// Source: spooler.go
-
-// Package mock is a generated GoMock package.
-package mock
-
-import (
- reflect "reflect"
- time "time"
-
- gomock "github.com/golang/mock/gomock"
-)
-
-// MockLocker is a mock of Locker interface.
-type MockLocker struct {
- ctrl *gomock.Controller
- recorder *MockLockerMockRecorder
-}
-
-// MockLockerMockRecorder is the mock recorder for MockLocker.
-type MockLockerMockRecorder struct {
- mock *MockLocker
-}
-
-// NewMockLocker creates a new mock instance.
-func NewMockLocker(ctrl *gomock.Controller) *MockLocker {
- mock := &MockLocker{ctrl: ctrl}
- mock.recorder = &MockLockerMockRecorder{mock}
- return mock
-}
-
-// EXPECT returns an object that allows the caller to indicate expected use.
-func (m *MockLocker) EXPECT() *MockLockerMockRecorder {
- return m.recorder
-}
-
-// Renew mocks base method.
-func (m *MockLocker) Renew(lockerID, viewModel, instanceID string, waitTime time.Duration) error {
- m.ctrl.T.Helper()
- ret := m.ctrl.Call(m, "Renew", lockerID, viewModel, instanceID, waitTime)
- ret0, _ := ret[0].(error)
- return ret0
-}
-
-// Renew indicates an expected call of Renew.
-func (mr *MockLockerMockRecorder) Renew(lockerID, viewModel, instanceID, waitTime interface{}) *gomock.Call {
- mr.mock.ctrl.T.Helper()
- return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Renew", reflect.TypeOf((*MockLocker)(nil).Renew), lockerID, viewModel, instanceID, waitTime)
-}
diff --git a/internal/eventstore/v1/spooler/spooler.go b/internal/eventstore/v1/spooler/spooler.go
deleted file mode 100644
index 6291e448d9..0000000000
--- a/internal/eventstore/v1/spooler/spooler.go
+++ /dev/null
@@ -1,292 +0,0 @@
-package spooler
-
-import (
- "context"
- "runtime/debug"
- "strconv"
- "sync"
- "time"
-
- "github.com/zitadel/logging"
-
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- "github.com/zitadel/zitadel/internal/telemetry/tracing"
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-const (
- systemID = "system"
- schedulerSucceeded = eventstore.EventType("system.projections.scheduler.succeeded")
- aggregateType = eventstore.AggregateType("system")
- aggregateID = "SYSTEM"
-)
-
-type Spooler struct {
- handlers []query.Handler
- locker Locker
- lockID string
- eventstore v1.Eventstore
- esV2 *eventstore.Eventstore
- workers int
- queue chan *spooledHandler
- concurrentInstances int
-}
-
-type Locker interface {
- Renew(lockerID, viewModel, instanceID string, waitTime time.Duration) error
-}
-
-type spooledHandler struct {
- query.Handler
- locker Locker
- queuedAt time.Time
- eventstore v1.Eventstore
- esV2 *eventstore.Eventstore
- concurrentInstances int
- succeededOnce bool
-}
-
-func (s *Spooler) Start() {
- defer logging.WithFields("lockerID", s.lockID, "workers", s.workers).Info("spooler started")
- if s.workers < 1 {
- return
- }
-
- for i := 0; i < s.workers; i++ {
- go func(workerIdx int) {
- workerID := s.lockID + "--" + strconv.Itoa(workerIdx)
- for task := range s.queue {
- go requeueTask(task, s.queue)
- task.load(workerID)
- }
- }(i)
- }
- go func() {
- for _, handler := range s.handlers {
- s.queue <- &spooledHandler{Handler: handler, locker: s.locker, queuedAt: time.Now(), eventstore: s.eventstore, esV2: s.esV2, concurrentInstances: s.concurrentInstances}
- }
- }()
-}
-
-func requeueTask(task *spooledHandler, queue chan<- *spooledHandler) {
- time.Sleep(task.MinimumCycleDuration() - time.Since(task.queuedAt))
- task.queuedAt = time.Now()
- queue <- task
-}
-
-func (s *spooledHandler) hasSucceededOnce(ctx context.Context) (bool, error) {
- events, err := s.esV2.Filter(ctx, eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
- AddQuery().
- AggregateTypes(aggregateType).
- AggregateIDs(aggregateID).
- EventTypes(schedulerSucceeded).
- EventData(map[string]interface{}{
- "name": s.ViewModel(),
- }).
- Builder(),
- )
- return len(events) > 0 && err == nil, err
-}
-
-func (s *spooledHandler) setSucceededOnce(ctx context.Context) error {
- _, err := s.esV2.Push(ctx, &handler.ProjectionSucceededEvent{
- BaseEvent: *eventstore.NewBaseEventForPush(ctx,
- eventstore.NewAggregate(ctx, aggregateID, aggregateType, "v1"),
- schedulerSucceeded,
- ),
- Name: s.ViewModel(),
- })
- s.succeededOnce = err == nil
- return err
-}
-
-func (s *spooledHandler) load(workerID string) {
- errs := make(chan error)
- defer func() {
- close(errs)
- err := recover()
-
- if err != nil {
- logging.WithFields(
- "cause", err,
- "stack", string(debug.Stack()),
- ).Error("reduce panicked")
- }
- }()
- ctx, cancel := context.WithCancel(context.Background())
- go s.awaitError(cancel, errs, workerID)
- hasLocked := s.lock(ctx, errs, workerID)
-
- if <-hasLocked {
- if !s.succeededOnce {
- var err error
- s.succeededOnce, err = s.hasSucceededOnce(ctx)
- if err != nil {
- logging.WithFields("view", s.ViewModel()).OnError(err).Debug("initial lock failed for first schedule")
- errs <- err
- return
- }
- }
-
- instanceIDQuery := models.NewSearchQuery().SetColumn(models.Columns_InstanceIDs).AddQuery().ExcludedInstanceIDsFilter("")
- for {
- if s.succeededOnce {
- // since we have at least one successful run, we can restrict it to events not older than
- // twice the requeue time (just to be sure not to miss an event)
- instanceIDQuery = instanceIDQuery.CreationDateNewerFilter(time.Now().Add(-2 * s.MinimumCycleDuration()))
- }
- ids, err := s.eventstore.InstanceIDs(ctx, instanceIDQuery.SearchQuery())
- if err != nil {
- errs <- err
- break
- }
- for i := 0; i < len(ids); i = i + s.concurrentInstances {
- max := i + s.concurrentInstances
- if max > len(ids) {
- max = len(ids)
- }
- err = s.processInstances(ctx, workerID, ids[i:max])
- if err != nil {
- errs <- err
- }
- }
- if ctx.Err() == nil {
- if !s.succeededOnce {
- err = s.setSucceededOnce(ctx)
- logging.WithFields("view", s.ViewModel()).OnError(err).Warn("unable to push first schedule succeeded")
- }
- errs <- nil
- }
- break
- }
- }
- <-ctx.Done()
-}
-
-func (s *spooledHandler) processInstances(ctx context.Context, workerID string, ids []string) error {
- for {
- processCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
- events, err := s.query(processCtx, ids)
- if err != nil {
- cancel()
- return err
- }
- if len(events) == 0 {
- cancel()
- return nil
- }
- err = s.process(processCtx, events, workerID, ids)
- cancel()
- if err != nil {
- return err
- }
- if uint64(len(events)) < s.QueryLimit() {
- // no more events to process
- return nil
- }
- }
-}
-
-func (s *spooledHandler) awaitError(cancel func(), errs chan error, workerID string) {
- select {
- case err := <-errs:
- cancel()
- logging.OnError(err).WithField("view", s.ViewModel()).WithField("worker", workerID).Debug("load canceled")
- }
-}
-
-func (s *spooledHandler) process(ctx context.Context, events []*models.Event, workerID string, instanceIDs []string) error {
- for i, event := range events {
- select {
- case <-ctx.Done():
- logging.WithFields("view", s.ViewModel(), "worker", workerID, "traceID", tracing.TraceIDFromCtx(ctx)).Debug("context canceled")
- return nil
- default:
- if err := s.Reduce(event); err != nil {
- err = s.OnError(event, err)
- if err == nil {
- continue
- }
- time.Sleep(100 * time.Millisecond)
- return s.process(ctx, events[i:], workerID, instanceIDs)
- }
- }
- }
- err := s.OnSuccess(instanceIDs)
- logging.WithFields("view", s.ViewModel(), "worker", workerID, "traceID", tracing.TraceIDFromCtx(ctx)).OnError(err).Warn("could not process on success func")
- return err
-}
-
-func (s *spooledHandler) query(ctx context.Context, instanceIDs []string) ([]*models.Event, error) {
- query, err := s.EventQuery(ctx, instanceIDs)
- if err != nil {
- return nil, err
- }
- query.Limit = s.QueryLimit()
- return s.eventstore.FilterEvents(ctx, query)
-}
-
-// lock ensures the lock on the database.
-// the returned channel will be closed if ctx is done or an error occured durring lock
-func (s *spooledHandler) lock(ctx context.Context, errs chan<- error, workerID string) chan bool {
- renewTimer := time.After(0)
- locked := make(chan bool)
-
- go func(locked chan bool) {
- var firstLock sync.Once
- defer close(locked)
- for {
- select {
- case <-ctx.Done():
- return
- case <-renewTimer:
- err := s.locker.Renew(workerID, s.ViewModel(), systemID, s.LockDuration())
- firstLock.Do(func() {
- locked <- err == nil
- })
- if err == nil {
- renewTimer = time.After(s.LockDuration())
- continue
- }
-
- if ctx.Err() == nil {
- errs <- err
- }
- return
- }
- }
- }(locked)
-
- return locked
-}
-
-func HandleError(event *models.Event, failedErr error,
- latestFailedEvent func(sequence uint64, instanceID string) (*repository.FailedEvent, error),
- processFailedEvent func(*repository.FailedEvent) error,
- processSequence func(*models.Event) error,
- errorCountUntilSkip uint64) error {
- failedEvent, err := latestFailedEvent(event.Sequence, event.InstanceID)
- if err != nil {
- return err
- }
- failedEvent.FailureCount++
- failedEvent.ErrMsg = failedErr.Error()
- failedEvent.InstanceID = event.InstanceID
- failedEvent.LastFailed = time.Now()
- err = processFailedEvent(failedEvent)
- if err != nil {
- return err
- }
- if errorCountUntilSkip <= failedEvent.FailureCount {
- return processSequence(event)
- }
- return failedErr
-}
-
-func HandleSuccess(updateSpoolerRunTimestamp func([]string) error, instanceIDs []string) error {
- return updateSpoolerRunTimestamp(instanceIDs)
-}
diff --git a/internal/eventstore/v1/spooler/spooler_test.go b/internal/eventstore/v1/spooler/spooler_test.go
deleted file mode 100644
index 862d2aed35..0000000000
--- a/internal/eventstore/v1/spooler/spooler_test.go
+++ /dev/null
@@ -1,514 +0,0 @@
-package spooler
-
-import (
- "context"
- "fmt"
- "testing"
- "time"
-
- "github.com/golang/mock/gomock"
-
- "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
- v1 "github.com/zitadel/zitadel/internal/eventstore/v1"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
- "github.com/zitadel/zitadel/internal/eventstore/v1/query"
- "github.com/zitadel/zitadel/internal/eventstore/v1/spooler/mock"
- "github.com/zitadel/zitadel/internal/view/repository"
-)
-
-var (
- testNow = time.Now()
-)
-
-type testHandler struct {
- cycleDuration time.Duration
- processSleep time.Duration
- processError error
- queryError error
- viewModel string
- bulkLimit uint64
- maxErrCount int
-}
-
-func (h *testHandler) AggregateTypes() []models.AggregateType {
- return nil
-}
-
-func (h *testHandler) CurrentSequence(ctx context.Context, instanceID string) (uint64, error) {
- return 0, nil
-}
-
-func (h *testHandler) Eventstore() v1.Eventstore {
- return nil
-}
-
-func (h *testHandler) ViewModel() string {
- return h.viewModel
-}
-
-func (h *testHandler) Subscription() *v1.Subscription {
- return nil
-}
-
-func (h *testHandler) EventQuery(ctx context.Context, instanceIDs []string) (*models.SearchQuery, error) {
- if h.queryError != nil {
- return nil, h.queryError
- }
- return &models.SearchQuery{}, nil
-}
-
-func (h *testHandler) Reduce(*models.Event) error {
- <-time.After(h.processSleep)
- return h.processError
-}
-
-func (h *testHandler) OnError(event *models.Event, err error) error {
- if h.maxErrCount == 2 {
- return nil
- }
- h.maxErrCount++
- return err
-}
-
-func (h *testHandler) OnSuccess([]string) error {
- return nil
-}
-
-func (h *testHandler) MinimumCycleDuration() time.Duration {
- return h.cycleDuration
-}
-
-func (h *testHandler) LockDuration() time.Duration {
- return h.cycleDuration / 2
-}
-
-func (h *testHandler) QueryLimit() uint64 {
- return h.bulkLimit
-}
-
-type eventstoreStub struct {
- events []*models.Event
- err error
-}
-
-func (es *eventstoreStub) Subscribe(...models.AggregateType) *v1.Subscription { return nil }
-
-func (es *eventstoreStub) Health(ctx context.Context) error {
- return nil
-}
-
-func (es *eventstoreStub) AggregateCreator() *models.AggregateCreator {
- return nil
-}
-
-func (es *eventstoreStub) FilterEvents(ctx context.Context, in *models.SearchQuery) ([]*models.Event, error) {
- if es.err != nil {
- return nil, es.err
- }
- return es.events, nil
-}
-func (es *eventstoreStub) PushAggregates(ctx context.Context, in ...*models.Aggregate) error {
- return nil
-}
-
-func (es *eventstoreStub) LatestSequence(ctx context.Context, in *models.SearchQueryFactory) (uint64, error) {
- return 0, nil
-}
-func (es *eventstoreStub) InstanceIDs(ctx context.Context, in *models.SearchQuery) ([]string, error) {
- return nil, nil
-}
-func (es *eventstoreStub) V2() *eventstore.Eventstore {
- return nil
-}
-
-func TestSpooler_process(t *testing.T) {
- type fields struct {
- currentHandler *testHandler
- }
- type args struct {
- timeout time.Duration
- events []*models.Event
- instanceIDs []string
- }
- tests := []struct {
- name string
- fields fields
- args args
- wantErr bool
- wantRetries int
- }{
- {
- name: "process all events",
- fields: fields{
- currentHandler: &testHandler{},
- },
- args: args{
- timeout: 0,
- events: []*models.Event{{}, {}},
- },
- wantErr: false,
- },
- {
- name: "deadline exeeded",
- fields: fields{
- currentHandler: &testHandler{processSleep: 501 * time.Millisecond},
- },
- args: args{
- timeout: 1 * time.Second,
- events: []*models.Event{{}, {}, {}, {}},
- },
- wantErr: false,
- },
- {
- name: "process error",
- fields: fields{
- currentHandler: &testHandler{processSleep: 1 * time.Second, processError: fmt.Errorf("i am an error")},
- },
- args: args{
- events: []*models.Event{{}, {}},
- },
- wantErr: false,
- wantRetries: 2,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := &spooledHandler{
- Handler: tt.fields.currentHandler,
- }
-
- ctx := context.Background()
- var start time.Time
- if tt.args.timeout > 0 {
- ctx, _ = context.WithTimeout(ctx, tt.args.timeout)
- start = time.Now()
- }
-
- if err := s.process(ctx, tt.args.events, "test", tt.args.instanceIDs); (err != nil) != tt.wantErr {
- t.Errorf("Spooler.process() error = %v, wantErr %v", err, tt.wantErr)
- }
- if tt.fields.currentHandler.maxErrCount != tt.wantRetries {
- t.Errorf("Spooler.process() wrong retry count got: %d want %d", tt.fields.currentHandler.maxErrCount, tt.wantRetries)
- }
-
- elapsed := time.Since(start).Round(1 * time.Second)
- if tt.args.timeout != 0 && elapsed != tt.args.timeout {
- t.Errorf("wrong timeout wanted %v elapsed %v since %v", tt.args.timeout, elapsed, time.Since(start))
- }
- })
- }
-}
-
-func TestSpooler_awaitError(t *testing.T) {
- type fields struct {
- currentHandler query.Handler
- err error
- canceled bool
- }
- tests := []struct {
- name string
- fields fields
- }{
- {
- "no error",
- fields{
- err: nil,
- currentHandler: &testHandler{processSleep: 500 * time.Millisecond},
- canceled: false,
- },
- },
- {
- "with error",
- fields{
- err: fmt.Errorf("hodor"),
- currentHandler: &testHandler{processSleep: 500 * time.Millisecond},
- canceled: false,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- s := &spooledHandler{
- Handler: tt.fields.currentHandler,
- }
- c := make(chan interface{})
- errs := make(chan error)
- ctx, cancel := context.WithCancel(context.Background())
-
- go func() {
- s.awaitError(cancel, errs, "test")
- c <- nil
- }()
- errs <- tt.fields.err
-
- <-c
- if ctx.Err() == nil {
- t.Error("cancel function was not called")
- }
- })
- }
-}
-
-// TestSpooler_load checks if load terminates
-func TestSpooler_load(t *testing.T) {
- type fields struct {
- currentHandler query.Handler
- locker *testLocker
- eventstore v1.Eventstore
- }
- tests := []struct {
- name string
- fields fields
- }{
- {
- "lock exists",
- fields{
- currentHandler: &testHandler{processSleep: 500 * time.Millisecond, viewModel: "testView1", cycleDuration: 1 * time.Second, bulkLimit: 10},
- locker: newTestLocker(t, "testID", "testView1").expectRenew(t, fmt.Errorf("lock already exists"), 500*time.Millisecond),
- },
- },
- {
- "lock fails",
- fields{
- currentHandler: &testHandler{processSleep: 100 * time.Millisecond, viewModel: "testView2", cycleDuration: 1 * time.Second, bulkLimit: 10},
- locker: newTestLocker(t, "testID", "testView2").expectRenew(t, fmt.Errorf("fail"), 500*time.Millisecond),
- eventstore: &eventstoreStub{events: []*models.Event{{}}},
- },
- },
- {
- "query fails",
- fields{
- currentHandler: &testHandler{processSleep: 100 * time.Millisecond, viewModel: "testView3", queryError: fmt.Errorf("query fail"), cycleDuration: 1 * time.Second, bulkLimit: 10},
- locker: newTestLocker(t, "testID", "testView3").expectRenew(t, nil, 500*time.Millisecond),
- eventstore: &eventstoreStub{err: fmt.Errorf("fail")},
- },
- },
- {
- "process event fails",
- fields{
- currentHandler: &testHandler{processError: fmt.Errorf("oups"), processSleep: 100 * time.Millisecond, viewModel: "testView4", cycleDuration: 500 * time.Millisecond, bulkLimit: 10},
- locker: newTestLocker(t, "testID", "testView4").expectRenew(t, nil, 250*time.Millisecond),
- eventstore: &eventstoreStub{events: []*models.Event{{}}},
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- defer tt.fields.locker.finish()
- s := &spooledHandler{
- Handler: tt.fields.currentHandler,
- locker: tt.fields.locker.mock,
- eventstore: tt.fields.eventstore,
- }
- s.load("test-worker")
- })
- }
-}
-
-func TestSpooler_lock(t *testing.T) {
- type fields struct {
- currentHandler query.Handler
- locker *testLocker
- expectsErr bool
- }
- type args struct {
- deadline time.Time
- }
- tests := []struct {
- name string
- fields fields
- args args
- }{
- {
- "renew correct",
- fields{
- currentHandler: &testHandler{cycleDuration: 1 * time.Second, viewModel: "testView"},
- locker: newTestLocker(t, "testID", "testView").expectRenew(t, nil, 500*time.Millisecond),
- expectsErr: false,
- },
- args{
- deadline: time.Now().Add(1 * time.Second),
- },
- },
- {
- "renew fails",
- fields{
- currentHandler: &testHandler{cycleDuration: 900 * time.Millisecond, viewModel: "testView"},
- locker: newTestLocker(t, "testID", "testView").expectRenew(t, fmt.Errorf("renew failed"), 450*time.Millisecond),
- expectsErr: true,
- },
- args{
- deadline: time.Now().Add(5 * time.Second),
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- defer tt.fields.locker.finish()
- s := &spooledHandler{
- Handler: tt.fields.currentHandler,
- locker: tt.fields.locker.mock,
- }
-
- errs := make(chan error, 1)
- defer close(errs)
- ctx, _ := context.WithDeadline(context.Background(), tt.args.deadline)
-
- locked := s.lock(ctx, errs, "test-worker")
-
- if tt.fields.expectsErr {
- lock := <-locked
- err := <-errs
- if err == nil {
- t.Error("No error in error queue")
- }
- if lock {
- t.Error("lock should have failed")
- }
- } else {
- lock := <-locked
- if !lock {
- t.Error("lock should be true")
- }
- }
- })
- }
-}
-
-type testLocker struct {
- mock *mock.MockLocker
- lockerID string
- viewName string
- ctrl *gomock.Controller
-}
-
-func newTestLocker(t *testing.T, lockerID, viewName string) *testLocker {
- ctrl := gomock.NewController(t)
- return &testLocker{mock.NewMockLocker(ctrl), lockerID, viewName, ctrl}
-}
-
-func (l *testLocker) expectRenew(t *testing.T, err error, waitTime time.Duration) *testLocker {
- t.Helper()
- l.mock.EXPECT().Renew(gomock.Any(), l.viewName, gomock.Any(), gomock.Any()).DoAndReturn(
- func(_, _, _ string, gotten time.Duration) error {
- t.Helper()
- if waitTime-gotten != 0 {
- t.Errorf("expected waittime %v got %v", waitTime, gotten)
- }
- return err
- }).MinTimes(1).MaxTimes(3)
-
- return l
-}
-
-func (l *testLocker) finish() {
- l.ctrl.Finish()
-}
-
-func TestHandleError(t *testing.T) {
- type args struct {
- event *models.Event
- failedErr error
- latestFailedEvent func(sequence uint64, instanceID string) (*repository.FailedEvent, error)
- errorCountUntilSkip uint64
- }
- type res struct {
- wantErr bool
- shouldProcessSequence bool
- }
- tests := []struct {
- name string
- args args
- res res
- }{
- {
- name: "should process sequence already too high",
- args: args{
- event: &models.Event{Sequence: 30000000},
- failedErr: errors.ThrowInternal(nil, "SPOOL-Wk53B", "this was wrong"),
- latestFailedEvent: func(s uint64, instanceID string) (*repository.FailedEvent, error) {
- return &repository.FailedEvent{
- ErrMsg: "blub",
- FailedSequence: s - 1,
- FailureCount: 6,
- ViewName: "super.table",
- InstanceID: instanceID,
- LastFailed: testNow,
- }, nil
- },
- errorCountUntilSkip: 5,
- },
- res: res{
- shouldProcessSequence: true,
- },
- },
- {
- name: "should process sequence after this event too high",
- args: args{
- event: &models.Event{Sequence: 30000000},
- failedErr: errors.ThrowInternal(nil, "SPOOL-Wk53B", "this was wrong"),
- latestFailedEvent: func(s uint64, instanceID string) (*repository.FailedEvent, error) {
- return &repository.FailedEvent{
- ErrMsg: "blub",
- FailedSequence: s - 1,
- FailureCount: 5,
- ViewName: "super.table",
- InstanceID: instanceID,
- LastFailed: testNow,
- }, nil
- },
- errorCountUntilSkip: 6,
- },
- res: res{
- shouldProcessSequence: true,
- },
- },
- {
- name: "should not process sequence",
- args: args{
- event: &models.Event{Sequence: 30000000},
- failedErr: errors.ThrowInternal(nil, "SPOOL-Wk53B", "this was wrong"),
- latestFailedEvent: func(s uint64, instanceID string) (*repository.FailedEvent, error) {
- return &repository.FailedEvent{
- ErrMsg: "blub",
- FailedSequence: s - 1,
- FailureCount: 3,
- ViewName: "super.table",
- InstanceID: instanceID,
- LastFailed: testNow,
- }, nil
- },
- errorCountUntilSkip: 5,
- },
- res: res{
- shouldProcessSequence: false,
- wantErr: true,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- processedSequence := false
- err := HandleError(
- tt.args.event,
- tt.args.failedErr,
- tt.args.latestFailedEvent,
- func(*repository.FailedEvent) error {
- return nil
- },
- func(*models.Event) error {
- processedSequence = true
- return nil
- },
- tt.args.errorCountUntilSkip)
-
- if (err != nil) != tt.res.wantErr {
- t.Errorf("HandleError() error = %v, wantErr %v", err, tt.res.wantErr)
- }
- if tt.res.shouldProcessSequence != processedSequence {
- t.Error("should not process sequence")
- }
- })
- }
-}
diff --git a/internal/eventstore/v1/subscription.go b/internal/eventstore/v1/subscription.go
deleted file mode 100644
index 34280edf49..0000000000
--- a/internal/eventstore/v1/subscription.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package v1
-
-import (
- "sync"
-
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
-)
-
-var (
- subscriptions map[models.AggregateType][]*Subscription = map[models.AggregateType][]*Subscription{}
- subsMutext sync.Mutex
-)
-
-type Subscription struct {
- Events chan *models.Event
- aggregates []models.AggregateType
-}
-
-func (es *eventstore) Subscribe(aggregates ...models.AggregateType) *Subscription {
- events := make(chan *models.Event, 100)
- sub := &Subscription{
- Events: events,
- aggregates: aggregates,
- }
-
- subsMutext.Lock()
- defer subsMutext.Unlock()
-
- for _, aggregate := range aggregates {
- _, ok := subscriptions[aggregate]
- if !ok {
- subscriptions[aggregate] = make([]*Subscription, 0, 1)
- }
- subscriptions[aggregate] = append(subscriptions[aggregate], sub)
- }
-
- return sub
-}
-
-func Notify(events []*models.Event) {
- subsMutext.Lock()
- defer subsMutext.Unlock()
- for _, event := range events {
- subs, ok := subscriptions[event.AggregateType]
- if !ok {
- continue
- }
- for _, sub := range subs {
- sub.Events <- event
- }
- }
-}
-
-func (s *Subscription) Unsubscribe() {
- subsMutext.Lock()
- defer subsMutext.Unlock()
- for _, aggregate := range s.aggregates {
- subs, ok := subscriptions[aggregate]
- if !ok {
- continue
- }
- for i := len(subs) - 1; i >= 0; i-- {
- if subs[i] == s {
- subs[i] = subs[len(subs)-1]
- subs[len(subs)-1] = nil
- subs = subs[:len(subs)-1]
- }
- }
- }
- _, ok := <-s.Events
- if ok {
- close(s.Events)
- }
-}
diff --git a/internal/eventstore/v3/event.go b/internal/eventstore/v3/event.go
new file mode 100644
index 0000000000..f99e91b050
--- /dev/null
+++ b/internal/eventstore/v3/event.go
@@ -0,0 +1,107 @@
+package eventstore
+
+import (
+ "encoding/json"
+ "time"
+
+ "github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+var (
+ _ eventstore.Event = (*event)(nil)
+)
+
+type event struct {
+ aggregate *eventstore.Aggregate
+ creator string
+ revision uint16
+ typ eventstore.EventType
+ createdAt time.Time
+ sequence uint64
+ position float64
+ payload Payload
+}
+
+func commandToEvent(sequence *latestSequence, command eventstore.Command) (_ *event, err error) {
+ var payload Payload
+ if command.Payload() != nil {
+ payload, err = json.Marshal(command.Payload())
+ if err != nil {
+ logging.WithError(err).Warn("marshal payload failed")
+ return nil, errors.ThrowInternal(err, "V3-MInPK", "Errors.Internal")
+ }
+ }
+ return &event{
+ aggregate: sequence.aggregate,
+ creator: command.Creator(),
+ revision: command.Revision(),
+ typ: command.Type(),
+ payload: payload,
+ sequence: sequence.sequence,
+ }, nil
+}
+
+// CreationDate implements [eventstore.Event]
+func (e *event) CreationDate() time.Time {
+ return e.CreatedAt()
+}
+
+// EditorUser implements [eventstore.Event]
+func (e *event) EditorUser() string {
+ return e.Creator()
+}
+
+// Aggregate implements [eventstore.Event]
+func (e *event) Aggregate() *eventstore.Aggregate {
+ return e.aggregate
+}
+
+// Creator implements [eventstore.Event]
+func (e *event) Creator() string {
+ return e.creator
+}
+
+// Revision implements [eventstore.Event]
+func (e *event) Revision() uint16 {
+ return e.revision
+}
+
+// Type implements [eventstore.Event]
+func (e *event) Type() eventstore.EventType {
+ return e.typ
+}
+
+// CreatedAt implements [eventstore.Event]
+func (e *event) CreatedAt() time.Time {
+ return e.createdAt
+}
+
+// Sequence implements [eventstore.Event]
+func (e *event) Sequence() uint64 {
+ return e.sequence
+}
+
+// Sequence implements [eventstore.Event]
+func (e *event) Position() float64 {
+ return e.position
+}
+
+// Unmarshal implements [eventstore.Event]
+func (e *event) Unmarshal(ptr any) error {
+ if len(e.payload) == 0 {
+ return nil
+ }
+ if err := json.Unmarshal(e.payload, ptr); err != nil {
+ return errors.ThrowInternal(err, "V3-u8qVo", "Errors.Internal")
+ }
+
+ return nil
+}
+
+// DataAsBytes implements [eventstore.Event]
+func (e *event) DataAsBytes() []byte {
+ return e.payload
+}
diff --git a/internal/eventstore/v3/event_test.go b/internal/eventstore/v3/event_test.go
new file mode 100644
index 0000000000..82a3aa1c9b
--- /dev/null
+++ b/internal/eventstore/v3/event_test.go
@@ -0,0 +1,128 @@
+package eventstore
+
+import (
+ "encoding/json"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+func Test_commandToEvent(t *testing.T) {
+ payload := struct {
+ ID string
+ }{
+ ID: "test",
+ }
+ payloadMarshalled, err := json.Marshal(payload)
+ if err != nil {
+ t.Fatalf("marshal of payload failed: %v", err)
+ }
+ type args struct {
+ sequence *latestSequence
+ command eventstore.Command
+ }
+ type want struct {
+ event *event
+ err func(t *testing.T, err error)
+ }
+ tests := []struct {
+ name string
+ args args
+ want want
+ }{
+ {
+ name: "no payload",
+ args: args{
+ sequence: &latestSequence{
+ aggregate: mockAggregate("V3-Red9I"),
+ sequence: 0,
+ },
+ command: &mockCommand{
+ aggregate: mockAggregate("V3-Red9I"),
+ payload: nil,
+ },
+ },
+ want: want{
+ event: mockEvent(
+ mockAggregate("V3-Red9I"),
+ 0,
+ nil,
+ ).(*event),
+ },
+ },
+ {
+ name: "struct payload",
+ args: args{
+ sequence: &latestSequence{
+ aggregate: mockAggregate("V3-Red9I"),
+ sequence: 0,
+ },
+ command: &mockCommand{
+ aggregate: mockAggregate("V3-Red9I"),
+ payload: payload,
+ },
+ },
+ want: want{
+ event: mockEvent(
+ mockAggregate("V3-Red9I"),
+ 0,
+ payloadMarshalled,
+ ).(*event),
+ },
+ },
+ {
+ name: "pointer payload",
+ args: args{
+ sequence: &latestSequence{
+ aggregate: mockAggregate("V3-Red9I"),
+ sequence: 0,
+ },
+ command: &mockCommand{
+ aggregate: mockAggregate("V3-Red9I"),
+ payload: &payload,
+ },
+ },
+ want: want{
+ event: mockEvent(
+ mockAggregate("V3-Red9I"),
+ 0,
+ payloadMarshalled,
+ ).(*event),
+ },
+ },
+ {
+ name: "invalid payload",
+ args: args{
+ sequence: &latestSequence{
+ aggregate: mockAggregate("V3-Red9I"),
+ sequence: 0,
+ },
+ command: &mockCommand{
+ aggregate: mockAggregate("V3-Red9I"),
+ payload: func() {},
+ },
+ },
+ want: want{
+ err: func(t *testing.T, err error) {
+ assert.Error(t, err)
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ if tt.want.err == nil {
+ tt.want.err = func(t *testing.T, err error) {
+ require.NoError(t, err)
+ }
+ }
+ t.Run(tt.name, func(t *testing.T) {
+ got, err := commandToEvent(tt.args.sequence, tt.args.command)
+
+ tt.want.err(t, err)
+ assert.Equal(t, tt.want.event, got)
+ })
+ }
+}
diff --git a/internal/eventstore/v3/eventstore.go b/internal/eventstore/v3/eventstore.go
new file mode 100644
index 0000000000..829f6a9400
--- /dev/null
+++ b/internal/eventstore/v3/eventstore.go
@@ -0,0 +1,29 @@
+package eventstore
+
+import (
+ "context"
+
+ "github.com/zitadel/zitadel/internal/database"
+)
+
+// pushPlaceholderFmt defines how data are inserted into the events table
+var pushPlaceholderFmt string
+
+type Eventstore struct {
+ client *database.DB
+}
+
+func NewEventstore(client *database.DB) *Eventstore {
+ switch client.Type() {
+ case "cockroach":
+ pushPlaceholderFmt = "($%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, hlc_to_timestamp(cluster_logical_timestamp()), cluster_logical_timestamp(), $%d)"
+ case "postgres":
+ pushPlaceholderFmt = "($%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, $%d, statement_timestamp(), EXTRACT(EPOCH FROM clock_timestamp()), $%d)"
+ }
+
+ return &Eventstore{client: client}
+}
+
+func (es *Eventstore) Health(ctx context.Context) error {
+ return es.client.PingContext(ctx)
+}
diff --git a/internal/eventstore/v3/mock_test.go b/internal/eventstore/v3/mock_test.go
new file mode 100644
index 0000000000..42435d9c44
--- /dev/null
+++ b/internal/eventstore/v3/mock_test.go
@@ -0,0 +1,64 @@
+package eventstore
+
+import (
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+var _ eventstore.Command = (*mockCommand)(nil)
+
+type mockCommand struct {
+ aggregate *eventstore.Aggregate
+ payload any
+ constraints []*eventstore.UniqueConstraint
+}
+
+// Aggregate implements [eventstore.Command]
+func (m *mockCommand) Aggregate() *eventstore.Aggregate {
+ return m.aggregate
+}
+
+// Creator implements [eventstore.Command]
+func (m *mockCommand) Creator() string {
+ return "creator"
+}
+
+// Revision implements [eventstore.Command]
+func (m *mockCommand) Revision() uint16 {
+ return 1
+}
+
+// Type implements [eventstore.Command]
+func (m *mockCommand) Type() eventstore.EventType {
+ return "event.type"
+}
+
+// Payload implements [eventstore.Command]
+func (m *mockCommand) Payload() any {
+ return m.payload
+}
+
+// UniqueConstraints implements [eventstore.Command]
+func (m *mockCommand) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return m.constraints
+}
+
+func mockEvent(aggregate *eventstore.Aggregate, sequence uint64, payload Payload) eventstore.Event {
+ return &event{
+ aggregate: aggregate,
+ creator: "creator",
+ revision: 1,
+ typ: "event.type",
+ sequence: sequence,
+ payload: payload,
+ }
+}
+
+func mockAggregate(id string) *eventstore.Aggregate {
+ return &eventstore.Aggregate{
+ ID: id,
+ Type: "type",
+ ResourceOwner: "ro",
+ InstanceID: "instance",
+ Version: "v1",
+ }
+}
diff --git a/internal/eventstore/v3/push.go b/internal/eventstore/v3/push.go
new file mode 100644
index 0000000000..b954b5ca45
--- /dev/null
+++ b/internal/eventstore/v3/push.go
@@ -0,0 +1,171 @@
+package eventstore
+
+import (
+ "context"
+ "database/sql"
+ _ "embed"
+ errs "errors"
+ "fmt"
+ "strconv"
+ "strings"
+ "sync"
+
+ "github.com/cockroachdb/cockroach-go/v2/crdb"
+ "github.com/jackc/pgconn"
+ "github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+func (es *Eventstore) Push(ctx context.Context, commands ...eventstore.Command) (events []eventstore.Event, err error) {
+ tx, err := es.client.Begin()
+ if err != nil {
+ return nil, err
+ }
+ // tx is not closed because [crdb.ExecuteInTx] takes care of that
+ var (
+ sequences []*latestSequence
+ once sync.Once
+ )
+
+ err = crdb.ExecuteInTx(ctx, &transaction{tx}, func() error {
+ once.Do(func() {
+ sequences, err = latestSequences(ctx, tx, commands)
+ })
+ if err != nil {
+ return err
+ }
+
+ events, err = insertEvents(ctx, tx, sequences, commands)
+ if err != nil {
+ return err
+ }
+
+ return handleUniqueConstraints(ctx, tx, commands)
+ })
+
+ if err != nil {
+ return nil, err
+ }
+
+ return events, nil
+}
+
+//go:embed push.sql
+var pushStmt string
+
+func insertEvents(ctx context.Context, tx *sql.Tx, sequences []*latestSequence, commands []eventstore.Command) ([]eventstore.Event, error) {
+ events, placeholders, args, err := mapCommands(commands, sequences)
+ if err != nil {
+ return nil, err
+ }
+
+ rows, err := tx.QueryContext(ctx, fmt.Sprintf(pushStmt, strings.Join(placeholders, ", ")), args...)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+
+ for i := 0; rows.Next(); i++ {
+ err = rows.Scan(&events[i].(*event).createdAt, &events[i].(*event).position)
+ if err != nil {
+ logging.WithError(err).Warn("failed to scan events")
+ return nil, err
+ }
+ }
+
+ if err := rows.Err(); err != nil {
+ pgErr := new(pgconn.PgError)
+ if errs.As(err, &pgErr) {
+ // Check if push tries to write an event just written
+ // by another transaction
+ if pgErr.Code == "40001" {
+ // TODO: @livio-a should we return the parent or not?
+ return nil, errors.ThrowInvalidArgument(err, "V3-p5xAn", "Errors.AlreadyExists")
+ }
+ }
+ logging.WithError(rows.Err()).Warn("failed to push events")
+ return nil, errors.ThrowInternal(err, "V3-VGnZY", "Errors.Internal")
+ }
+
+ return events, nil
+}
+
+const argsPerCommand = 10
+
+func mapCommands(commands []eventstore.Command, sequences []*latestSequence) (events []eventstore.Event, placeholders []string, args []any, err error) {
+ events = make([]eventstore.Event, len(commands))
+ args = make([]any, 0, len(commands)*argsPerCommand)
+ placeholders = make([]string, len(commands))
+
+ for i, command := range commands {
+ sequence := searchSequenceByCommand(sequences, command)
+ if sequence == nil {
+ logging.WithFields(
+ "aggType", command.Aggregate().Type,
+ "aggID", command.Aggregate().ID,
+ "instance", command.Aggregate().InstanceID,
+ ).Panic("no sequence found")
+ // added return for linting
+ return nil, nil, nil, nil
+ }
+ sequence.sequence++
+
+ events[i], err = commandToEvent(sequence, command)
+ if err != nil {
+ return nil, nil, nil, err
+ }
+
+ placeholders[i] = fmt.Sprintf(pushPlaceholderFmt,
+ i*argsPerCommand+1,
+ i*argsPerCommand+2,
+ i*argsPerCommand+3,
+ i*argsPerCommand+4,
+ i*argsPerCommand+5,
+ i*argsPerCommand+6,
+ i*argsPerCommand+7,
+ i*argsPerCommand+8,
+ i*argsPerCommand+9,
+ i*argsPerCommand+10,
+ )
+
+ revision, err := strconv.Atoi(strings.TrimPrefix(string(events[i].(*event).aggregate.Version), "v"))
+ if err != nil {
+ return nil, nil, nil, errors.ThrowInternal(err, "V3-JoZEp", "Errors.Internal")
+ }
+ args = append(args,
+ events[i].(*event).aggregate.InstanceID,
+ events[i].(*event).aggregate.ResourceOwner,
+ events[i].(*event).aggregate.Type,
+ events[i].(*event).aggregate.ID,
+ revision,
+ events[i].(*event).creator,
+ events[i].(*event).typ,
+ events[i].(*event).payload,
+ events[i].(*event).sequence,
+ i,
+ )
+ }
+
+ return events, placeholders, args, nil
+}
+
+type transaction struct {
+ *sql.Tx
+}
+
+var _ crdb.Tx = (*transaction)(nil)
+
+func (t *transaction) Exec(ctx context.Context, query string, args ...interface{}) error {
+ _, err := t.Tx.ExecContext(ctx, query, args...)
+ return err
+}
+
+func (t *transaction) Commit(ctx context.Context) error {
+ return t.Tx.Commit()
+}
+
+func (t *transaction) Rollback(ctx context.Context) error {
+ return t.Tx.Rollback()
+}
diff --git a/internal/eventstore/v3/push.sql b/internal/eventstore/v3/push.sql
new file mode 100644
index 0000000000..0250948953
--- /dev/null
+++ b/internal/eventstore/v3/push.sql
@@ -0,0 +1,18 @@
+INSERT INTO eventstore.events2 (
+ instance_id
+ , "owner"
+ , aggregate_type
+ , aggregate_id
+ , revision
+
+ , creator
+ , event_type
+ , payload
+ , "sequence"
+ , created_at
+
+ , "position"
+ , in_tx_order
+) VALUES
+ %s
+RETURNING created_at, "position";
\ No newline at end of file
diff --git a/internal/eventstore/v3/push_test.go b/internal/eventstore/v3/push_test.go
new file mode 100644
index 0000000000..0f16a2ac75
--- /dev/null
+++ b/internal/eventstore/v3/push_test.go
@@ -0,0 +1,253 @@
+package eventstore
+
+import (
+ _ "embed"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+
+ "github.com/zitadel/zitadel/internal/database"
+ "github.com/zitadel/zitadel/internal/database/cockroach"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+func Test_mapCommands(t *testing.T) {
+ type args struct {
+ commands []eventstore.Command
+ sequences []*latestSequence
+ }
+ type want struct {
+ events []eventstore.Event
+ placeHolders []string
+ args []any
+ err func(t *testing.T, err error)
+ shouldPanic bool
+ }
+ tests := []struct {
+ name string
+ args args
+ want want
+ }{
+ {
+ name: "no commands",
+ args: args{
+ commands: []eventstore.Command{},
+ sequences: []*latestSequence{},
+ },
+ want: want{
+ events: []eventstore.Event{},
+ placeHolders: []string{},
+ args: []any{},
+ },
+ },
+ {
+ name: "one command",
+ args: args{
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: mockAggregate("V3-VEIvq"),
+ },
+ },
+ sequences: []*latestSequence{
+ {
+ aggregate: mockAggregate("V3-VEIvq"),
+ sequence: 0,
+ },
+ },
+ },
+ want: want{
+ events: []eventstore.Event{
+ mockEvent(
+ mockAggregate("V3-VEIvq"),
+ 1,
+ nil,
+ ),
+ },
+ placeHolders: []string{
+ "($1, $2, $3, $4, $5, $6, $7, $8, $9, hlc_to_timestamp(cluster_logical_timestamp()), cluster_logical_timestamp(), $10)",
+ },
+ args: []any{
+ "instance",
+ "ro",
+ eventstore.AggregateType("type"),
+ "V3-VEIvq",
+ 1,
+ "creator",
+ eventstore.EventType("event.type"),
+ Payload(nil),
+ uint64(1),
+ 0,
+ },
+ err: func(t *testing.T, err error) {},
+ },
+ },
+ {
+ name: "multiple commands same aggregate",
+ args: args{
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: mockAggregate("V3-VEIvq"),
+ },
+ &mockCommand{
+ aggregate: mockAggregate("V3-VEIvq"),
+ },
+ },
+ sequences: []*latestSequence{
+ {
+ aggregate: mockAggregate("V3-VEIvq"),
+ sequence: 5,
+ },
+ },
+ },
+ want: want{
+ events: []eventstore.Event{
+ mockEvent(
+ mockAggregate("V3-VEIvq"),
+ 6,
+ nil,
+ ),
+ mockEvent(
+ mockAggregate("V3-VEIvq"),
+ 7,
+ nil,
+ ),
+ },
+ placeHolders: []string{
+ "($1, $2, $3, $4, $5, $6, $7, $8, $9, hlc_to_timestamp(cluster_logical_timestamp()), cluster_logical_timestamp(), $10)",
+ "($11, $12, $13, $14, $15, $16, $17, $18, $19, hlc_to_timestamp(cluster_logical_timestamp()), cluster_logical_timestamp(), $20)",
+ },
+ args: []any{
+ // first event
+ "instance",
+ "ro",
+ eventstore.AggregateType("type"),
+ "V3-VEIvq",
+ 1,
+ "creator",
+ eventstore.EventType("event.type"),
+ Payload(nil),
+ uint64(6),
+ 0,
+ // second event
+ "instance",
+ "ro",
+ eventstore.AggregateType("type"),
+ "V3-VEIvq",
+ 1,
+ "creator",
+ eventstore.EventType("event.type"),
+ Payload(nil),
+ uint64(7),
+ 1,
+ },
+ err: func(t *testing.T, err error) {},
+ },
+ },
+ {
+ name: "one command per aggregate",
+ args: args{
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: mockAggregate("V3-VEIvq"),
+ },
+ &mockCommand{
+ aggregate: mockAggregate("V3-IT6VN"),
+ },
+ },
+ sequences: []*latestSequence{
+ {
+ aggregate: mockAggregate("V3-VEIvq"),
+ sequence: 5,
+ },
+ {
+ aggregate: mockAggregate("V3-IT6VN"),
+ sequence: 0,
+ },
+ },
+ },
+ want: want{
+ events: []eventstore.Event{
+ mockEvent(
+ mockAggregate("V3-VEIvq"),
+ 6,
+ nil,
+ ),
+ mockEvent(
+ mockAggregate("V3-IT6VN"),
+ 1,
+ nil,
+ ),
+ },
+ placeHolders: []string{
+ "($1, $2, $3, $4, $5, $6, $7, $8, $9, hlc_to_timestamp(cluster_logical_timestamp()), cluster_logical_timestamp(), $10)",
+ "($11, $12, $13, $14, $15, $16, $17, $18, $19, hlc_to_timestamp(cluster_logical_timestamp()), cluster_logical_timestamp(), $20)",
+ },
+ args: []any{
+ // first event
+ "instance",
+ "ro",
+ eventstore.AggregateType("type"),
+ "V3-VEIvq",
+ 1,
+ "creator",
+ eventstore.EventType("event.type"),
+ Payload(nil),
+ uint64(6),
+ 0,
+ // second event
+ "instance",
+ "ro",
+ eventstore.AggregateType("type"),
+ "V3-IT6VN",
+ 1,
+ "creator",
+ eventstore.EventType("event.type"),
+ Payload(nil),
+ uint64(1),
+ 1,
+ },
+ err: func(t *testing.T, err error) {},
+ },
+ },
+ {
+ name: "missing sequence",
+ args: args{
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: mockAggregate("V3-VEIvq"),
+ },
+ },
+ sequences: []*latestSequence{},
+ },
+ want: want{
+ events: []eventstore.Event{},
+ placeHolders: []string{},
+ args: []any{},
+ err: func(t *testing.T, err error) {},
+ shouldPanic: true,
+ },
+ },
+ }
+ for _, tt := range tests {
+ if tt.want.err == nil {
+ tt.want.err = func(t *testing.T, err error) {
+ require.NoError(t, err)
+ }
+ }
+ // is used to set the the [pushPlaceholderFmt]
+ NewEventstore(&database.DB{Database: new(cockroach.Config)})
+ t.Run(tt.name, func(t *testing.T) {
+ defer func() {
+ cause := recover()
+ assert.Equal(t, tt.want.shouldPanic, cause != nil)
+ }()
+ gotEvents, gotPlaceHolders, gotArgs, err := mapCommands(tt.args.commands, tt.args.sequences)
+ tt.want.err(t, err)
+
+ assert.ElementsMatch(t, tt.want.events, gotEvents)
+ assert.ElementsMatch(t, tt.want.placeHolders, gotPlaceHolders)
+ assert.ElementsMatch(t, tt.want.args, gotArgs)
+ })
+ }
+}
diff --git a/internal/eventstore/v3/sequence.go b/internal/eventstore/v3/sequence.go
new file mode 100644
index 0000000000..3155ac3a92
--- /dev/null
+++ b/internal/eventstore/v3/sequence.go
@@ -0,0 +1,132 @@
+package eventstore
+
+import (
+ "context"
+ "database/sql"
+ _ "embed"
+ "fmt"
+ "strings"
+
+ "github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/api/authz"
+ "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+type latestSequence struct {
+ aggregate *eventstore.Aggregate
+ sequence uint64
+}
+
+//go:embed sequences_query.sql
+var latestSequencesStmt string
+
+func latestSequences(ctx context.Context, tx *sql.Tx, commands []eventstore.Command) ([]*latestSequence, error) {
+ sequences := commandsToSequences(ctx, commands)
+
+ conditions, args := sequencesToSql(sequences)
+ rows, err := tx.QueryContext(ctx, fmt.Sprintf(latestSequencesStmt, strings.Join(conditions, " OR ")), args...)
+ if err != nil {
+ return nil, errors.ThrowInternal(err, "V3-5jU5z", "Errors.Internal")
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ if err := scanToSequence(rows, sequences); err != nil {
+ return nil, errors.ThrowInternal(err, "V3-Ydiwv", "Errors.Internal")
+ }
+ }
+
+ if rows.Err() != nil {
+ return nil, errors.ThrowInternal(rows.Err(), "V3-XApDk", "Errors.Internal")
+ }
+ return sequences, nil
+}
+
+func searchSequenceByCommand(sequences []*latestSequence, command eventstore.Command) *latestSequence {
+ for _, sequence := range sequences {
+ if sequence.aggregate.Type == command.Aggregate().Type &&
+ sequence.aggregate.ID == command.Aggregate().ID &&
+ sequence.aggregate.InstanceID == command.Aggregate().InstanceID {
+ return sequence
+ }
+ }
+ return nil
+}
+
+func searchSequence(sequences []*latestSequence, aggregateType eventstore.AggregateType, aggregateID, instanceID string) *latestSequence {
+ for _, sequence := range sequences {
+ if sequence.aggregate.Type == aggregateType &&
+ sequence.aggregate.ID == aggregateID &&
+ sequence.aggregate.InstanceID == instanceID {
+ return sequence
+ }
+ }
+ return nil
+}
+
+func commandsToSequences(ctx context.Context, commands []eventstore.Command) []*latestSequence {
+ sequences := make([]*latestSequence, 0, len(commands))
+
+ for _, command := range commands {
+ if searchSequenceByCommand(sequences, command) != nil {
+ continue
+ }
+
+ if command.Aggregate().InstanceID == "" {
+ command.Aggregate().InstanceID = authz.GetInstance(ctx).InstanceID()
+ }
+ sequences = append(sequences, &latestSequence{
+ aggregate: command.Aggregate(),
+ })
+ }
+
+ return sequences
+}
+
+const argsPerCondition = 3
+
+func sequencesToSql(sequences []*latestSequence) (conditions []string, args []any) {
+ args = make([]interface{}, 0, len(sequences)*argsPerCondition)
+ conditions = make([]string, len(sequences))
+
+ for i, sequence := range sequences {
+ conditions[i] = fmt.Sprintf("(instance_id = $%d AND aggregate_type = $%d AND aggregate_id = $%d)",
+ i*argsPerCondition+1,
+ i*argsPerCondition+2,
+ i*argsPerCondition+3,
+ )
+ args = append(args, sequence.aggregate.InstanceID, sequence.aggregate.Type, sequence.aggregate.ID)
+ }
+
+ return conditions, args
+}
+
+func scanToSequence(rows *sql.Rows, sequences []*latestSequence) error {
+ var aggregateType eventstore.AggregateType
+ var aggregateID, instanceID string
+ var currentSequence uint64
+ var resourceOwner string
+
+ if err := rows.Scan(&instanceID, &resourceOwner, &aggregateType, &aggregateID, ¤tSequence); err != nil {
+ return errors.ThrowInternal(err, "V3-OIWqj", "Errors.Internal")
+ }
+
+ sequence := searchSequence(sequences, aggregateType, aggregateID, instanceID)
+ if sequence == nil {
+ logging.WithFields(
+ "aggType", aggregateType,
+ "aggID", aggregateID,
+ "instance", instanceID,
+ ).Panic("no sequence found")
+ // added return for linting
+ return nil
+ }
+ sequence.sequence = currentSequence
+ if sequence.aggregate.ResourceOwner == "" {
+ sequence.aggregate.ResourceOwner = resourceOwner
+ }
+
+ return nil
+}
diff --git a/internal/eventstore/v3/sequence_test.go b/internal/eventstore/v3/sequence_test.go
new file mode 100644
index 0000000000..55ee73831d
--- /dev/null
+++ b/internal/eventstore/v3/sequence_test.go
@@ -0,0 +1,293 @@
+package eventstore
+
+import (
+ "context"
+ _ "embed"
+ "reflect"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+
+ "github.com/zitadel/zitadel/internal/api/authz"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+func Test_searchSequence(t *testing.T) {
+ sequence := &latestSequence{
+ aggregate: mockAggregate("V3-p1BWC"),
+ sequence: 1,
+ }
+ type args struct {
+ sequences []*latestSequence
+ aggregateType eventstore.AggregateType
+ aggregateID string
+ instanceID string
+ }
+ tests := []struct {
+ name string
+ args args
+ want *latestSequence
+ }{
+ {
+ name: "type missmatch",
+ args: args{
+ sequences: []*latestSequence{
+ sequence,
+ },
+ aggregateType: "wrong",
+ aggregateID: "V3-p1BWC",
+ instanceID: "instance",
+ },
+ want: nil,
+ },
+ {
+ name: "id missmatch",
+ args: args{
+ sequences: []*latestSequence{
+ sequence,
+ },
+ aggregateType: "type",
+ aggregateID: "wrong",
+ instanceID: "instance",
+ },
+ want: nil,
+ },
+ {
+ name: "instance missmatch",
+ args: args{
+ sequences: []*latestSequence{
+ sequence,
+ },
+ aggregateType: "type",
+ aggregateID: "V3-p1BWC",
+ instanceID: "wrong",
+ },
+ want: nil,
+ },
+ {
+ name: "match",
+ args: args{
+ sequences: []*latestSequence{
+ sequence,
+ },
+ aggregateType: "type",
+ aggregateID: "V3-p1BWC",
+ instanceID: "instance",
+ },
+ want: sequence,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := searchSequence(tt.args.sequences, tt.args.aggregateType, tt.args.aggregateID, tt.args.instanceID); !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("searchSequence() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+
+func Test_commandsToSequences(t *testing.T) {
+ aggregate := mockAggregate("V3-MKHTF")
+ type args struct {
+ ctx context.Context
+ commands []eventstore.Command
+ }
+ tests := []struct {
+ name string
+ args args
+ want []*latestSequence
+ }{
+ {
+ name: "no command",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{},
+ },
+ want: []*latestSequence{},
+ },
+ {
+ name: "one command",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: aggregate,
+ },
+ },
+ },
+ want: []*latestSequence{
+ {
+ aggregate: aggregate,
+ },
+ },
+ },
+ {
+ name: "two commands same aggregate",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: aggregate,
+ },
+ &mockCommand{
+ aggregate: aggregate,
+ },
+ },
+ },
+ want: []*latestSequence{
+ {
+ aggregate: aggregate,
+ },
+ },
+ },
+ {
+ name: "two commands different aggregates",
+ args: args{
+ ctx: context.Background(),
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: aggregate,
+ },
+ &mockCommand{
+ aggregate: mockAggregate("V3-cZkCy"),
+ },
+ },
+ },
+ want: []*latestSequence{
+ {
+ aggregate: aggregate,
+ },
+ {
+ aggregate: mockAggregate("V3-cZkCy"),
+ },
+ },
+ },
+ {
+ name: "instance set in command",
+ args: args{
+ ctx: authz.WithInstanceID(context.Background(), "V3-ANV4p"),
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: &eventstore.Aggregate{
+ ID: "V3-bF0Sa",
+ Type: "type",
+ ResourceOwner: "to",
+ InstanceID: "instance",
+ Version: "v1",
+ },
+ },
+ },
+ },
+ want: []*latestSequence{
+ {
+ aggregate: &eventstore.Aggregate{
+ ID: "V3-bF0Sa",
+ Type: "type",
+ ResourceOwner: "to",
+ InstanceID: "instance",
+ Version: "v1",
+ },
+ },
+ },
+ },
+ {
+ name: "instance from context",
+ args: args{
+ ctx: authz.WithInstanceID(context.Background(), "V3-ANV4p"),
+ commands: []eventstore.Command{
+ &mockCommand{
+ aggregate: &eventstore.Aggregate{
+ ID: "V3-bF0Sa",
+ Type: "type",
+ ResourceOwner: "to",
+ Version: "v1",
+ },
+ },
+ },
+ },
+ want: []*latestSequence{
+ {
+ aggregate: &eventstore.Aggregate{
+ ID: "V3-bF0Sa",
+ Type: "type",
+ ResourceOwner: "to",
+ InstanceID: "V3-ANV4p",
+ Version: "v1",
+ },
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ got := commandsToSequences(tt.args.ctx, tt.args.commands)
+ assert.ElementsMatch(t, tt.want, got)
+ })
+ }
+}
+
+func Test_sequencesToSql(t *testing.T) {
+ tests := []struct {
+ name string
+ arg []*latestSequence
+ wantConditions []string
+ wantArgs []any
+ }{
+ {
+ name: "no sequence",
+ arg: []*latestSequence{},
+ wantConditions: []string{},
+ wantArgs: []any{},
+ },
+ {
+ name: "one",
+ arg: []*latestSequence{
+ {
+ aggregate: mockAggregate("V3-SbpGB"),
+ },
+ },
+ wantConditions: []string{
+ "(instance_id = $1 AND aggregate_type = $2 AND aggregate_id = $3)",
+ },
+ wantArgs: []any{
+ "instance",
+ eventstore.AggregateType("type"),
+ "V3-SbpGB",
+ },
+ },
+ {
+ name: "multiple",
+ arg: []*latestSequence{
+ {
+ aggregate: mockAggregate("V3-SbpGB"),
+ },
+ {
+ aggregate: mockAggregate("V3-0X3yt"),
+ },
+ },
+ wantConditions: []string{
+ "(instance_id = $1 AND aggregate_type = $2 AND aggregate_id = $3)",
+ "(instance_id = $4 AND aggregate_type = $5 AND aggregate_id = $6)",
+ },
+ wantArgs: []any{
+ "instance",
+ eventstore.AggregateType("type"),
+ "V3-SbpGB",
+ "instance",
+ eventstore.AggregateType("type"),
+ "V3-0X3yt",
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ gotConditions, gotArgs := sequencesToSql(tt.arg)
+ if !reflect.DeepEqual(gotConditions, tt.wantConditions) {
+ t.Errorf("sequencesToSql() gotConditions = %v, want %v", gotConditions, tt.wantConditions)
+ }
+ if !reflect.DeepEqual(gotArgs, tt.wantArgs) {
+ t.Errorf("sequencesToSql() gotArgs = %v, want %v", gotArgs, tt.wantArgs)
+ }
+ })
+ }
+}
diff --git a/internal/eventstore/v3/sequences_query.sql b/internal/eventstore/v3/sequences_query.sql
new file mode 100644
index 0000000000..fb164013dc
--- /dev/null
+++ b/internal/eventstore/v3/sequences_query.sql
@@ -0,0 +1,30 @@
+with existing as (
+ SELECT
+ instance_id
+ , aggregate_type
+ , aggregate_id
+ , MAX("sequence") "sequence"
+ FROM
+ eventstore.events2 existing
+ WHERE
+ %s
+ GROUP BY
+ instance_id
+ , aggregate_type
+ , aggregate_id
+) SELECT
+ e.instance_id
+ , e.owner
+ , e.aggregate_type
+ , e.aggregate_id
+ , e.sequence
+FROM
+ eventstore.events2 e
+JOIN
+ existing
+ON
+ e.instance_id = existing.instance_id
+ AND e.aggregate_type = existing.aggregate_type
+ AND e.aggregate_id = existing.aggregate_id
+ AND e.sequence = existing.sequence
+FOR UPDATE;
\ No newline at end of file
diff --git a/internal/eventstore/v3/type.go b/internal/eventstore/v3/type.go
new file mode 100644
index 0000000000..3ed807b446
--- /dev/null
+++ b/internal/eventstore/v3/type.go
@@ -0,0 +1,25 @@
+package eventstore
+
+import "database/sql/driver"
+
+// Payload represents a byte array that may be null.
+// Payload implements the sql.Scanner interface
+type Payload []byte
+
+// Scan implements the Scanner interface.
+func (data *Payload) Scan(value interface{}) error {
+ if value == nil {
+ *data = nil
+ return nil
+ }
+ *data = Payload(value.([]byte))
+ return nil
+}
+
+// Value implements the driver Valuer interface.
+func (data Payload) Value() (driver.Value, error) {
+ if len(data) == 0 {
+ return nil, nil
+ }
+ return []byte(data), nil
+}
diff --git a/internal/eventstore/v3/unique_constraints.go b/internal/eventstore/v3/unique_constraints.go
new file mode 100644
index 0000000000..0527f16874
--- /dev/null
+++ b/internal/eventstore/v3/unique_constraints.go
@@ -0,0 +1,89 @@
+package eventstore
+
+import (
+ "context"
+ "database/sql"
+ _ "embed"
+ "errors"
+ "fmt"
+ "strings"
+
+ "github.com/jackc/pgconn"
+ "github.com/zitadel/logging"
+
+ errs "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
+)
+
+var (
+ //go:embed unique_constraints_delete.sql
+ deleteConstraintStmt string
+ //go:embed unique_constraints_add.sql
+ addConstraintStmt string
+)
+
+func handleUniqueConstraints(ctx context.Context, tx *sql.Tx, commands []eventstore.Command) error {
+ deletePlaceholders := make([]string, 0)
+ deleteArgs := make([]any, 0)
+
+ addPlaceholders := make([]string, 0)
+ addArgs := make([]any, 0)
+ addConstraints := map[string]*eventstore.UniqueConstraint{}
+ deleteConstraints := map[string]*eventstore.UniqueConstraint{}
+
+ for _, command := range commands {
+ for _, constraint := range command.UniqueConstraints() {
+ switch constraint.Action {
+ case eventstore.UniqueConstraintAdd:
+ addPlaceholders = append(addPlaceholders, fmt.Sprintf("($%d, $%d, $%d)", len(addArgs)+1, len(addArgs)+2, len(addArgs)+3))
+ addArgs = append(addArgs, command.Aggregate().InstanceID, constraint.UniqueType, constraint.UniqueField)
+ addConstraints[fmt.Sprintf("('%s', '%s', '%s')", command.Aggregate().InstanceID, constraint.UniqueType, constraint.UniqueField)] = constraint
+ case eventstore.UniqueConstraintRemove:
+ deletePlaceholders = append(deletePlaceholders, fmt.Sprintf("(instance_id = $%d AND unique_type = $%d AND unique_field = $%d)", len(deleteArgs)+1, len(deleteArgs)+2, len(deleteArgs)+3))
+ deleteArgs = append(deleteArgs, command.Aggregate().InstanceID, constraint.UniqueType, constraint.UniqueField)
+ deleteConstraints[fmt.Sprintf("('%s', '%s', '%s')", command.Aggregate().InstanceID, constraint.UniqueType, constraint.UniqueField)] = constraint
+ case eventstore.UniqueConstraintInstanceRemove:
+ deletePlaceholders = append(deletePlaceholders, fmt.Sprintf("(instance_id = $%d)", len(deleteArgs)+1))
+ deleteArgs = append(deleteArgs, command.Aggregate().InstanceID)
+ deleteConstraints[fmt.Sprintf("('%s', '%s', '%s')", command.Aggregate().InstanceID, constraint.UniqueType, constraint.UniqueField)] = constraint
+ }
+ }
+ }
+
+ if len(deletePlaceholders) > 0 {
+ _, err := tx.ExecContext(ctx, fmt.Sprintf(deleteConstraintStmt, strings.Join(deletePlaceholders, " OR ")), deleteArgs...)
+ if err != nil {
+ logging.WithError(err).Warn("delete unique constraint failed")
+ errMessage := "Errors.Internal"
+ if constraint := constraintFromErr(err, deleteConstraints); constraint != nil {
+ errMessage = constraint.ErrorMessage
+ }
+ return errs.ThrowInternal(err, "V3-C8l3V", errMessage)
+ }
+ }
+ if len(addPlaceholders) > 0 {
+ _, err := tx.ExecContext(ctx, fmt.Sprintf(addConstraintStmt, strings.Join(addPlaceholders, ", ")), addArgs...)
+ if err != nil {
+ logging.WithError(err).Warn("add unique constraint failed")
+ errMessage := "Errors.Internal"
+ if constraint := constraintFromErr(err, addConstraints); constraint != nil {
+ errMessage = constraint.ErrorMessage
+ }
+ return errs.ThrowInternal(err, "V3-DKcYh", errMessage)
+ }
+ }
+ return nil
+}
+
+func constraintFromErr(err error, constraints map[string]*eventstore.UniqueConstraint) *eventstore.UniqueConstraint {
+ pgErr := new(pgconn.PgError)
+ if !errors.As(err, &pgErr) {
+ return nil
+ }
+ for key, constraint := range constraints {
+ if strings.Contains(pgErr.Detail, key) {
+ return constraint
+ }
+ }
+ return nil
+}
diff --git a/internal/eventstore/v3/unique_constraints_add.sql b/internal/eventstore/v3/unique_constraints_add.sql
new file mode 100644
index 0000000000..1d0d9e5be2
--- /dev/null
+++ b/internal/eventstore/v3/unique_constraints_add.sql
@@ -0,0 +1,6 @@
+INSERT INTO eventstore.unique_constraints (
+ instance_id
+ , unique_type
+ , unique_field
+) VALUES
+ %s
\ No newline at end of file
diff --git a/internal/eventstore/v3/unique_constraints_delete.sql b/internal/eventstore/v3/unique_constraints_delete.sql
new file mode 100644
index 0000000000..f84b8c2264
--- /dev/null
+++ b/internal/eventstore/v3/unique_constraints_delete.sql
@@ -0,0 +1 @@
+DELETE FROM eventstore.unique_constraints WHERE %s
\ No newline at end of file
diff --git a/internal/eventstore/version.go b/internal/eventstore/version.go
index ee1c5b6ef6..518b78d155 100644
--- a/internal/eventstore/version.go
+++ b/internal/eventstore/version.go
@@ -1,7 +1,18 @@
package eventstore
import (
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "regexp"
+
+ "github.com/zitadel/zitadel/internal/errors"
)
-type Version repository.Version
+type Version string
+
+var versionRegexp = regexp.MustCompile(`^v[0-9]+(\.[0-9]+){0,2}$`)
+
+func (v Version) Validate() error {
+ if !versionRegexp.MatchString(string(v)) {
+ return errors.ThrowPreconditionFailed(nil, "MODEL-luDuS", "version is not semver")
+ }
+ return nil
+}
diff --git a/internal/eventstore/repository/version_test.go b/internal/eventstore/version_test.go
similarity index 96%
rename from internal/eventstore/repository/version_test.go
rename to internal/eventstore/version_test.go
index c64db50c3c..5bc92f9d13 100644
--- a/internal/eventstore/repository/version_test.go
+++ b/internal/eventstore/version_test.go
@@ -1,4 +1,4 @@
-package repository
+package eventstore
import "testing"
diff --git a/internal/eventstore/write_model.go b/internal/eventstore/write_model.go
index 0ac28eb888..277e65ed82 100644
--- a/internal/eventstore/write_model.go
+++ b/internal/eventstore/write_model.go
@@ -2,7 +2,7 @@ package eventstore
import "time"
-//WriteModel is the minimum representation of a command side write model.
+// WriteModel is the minimum representation of a command side write model.
// It implements a basic reducer
// it's purpose is to reduce events to create new ones
type WriteModel struct {
@@ -14,13 +14,13 @@ type WriteModel struct {
ChangeDate time.Time `json:"-"`
}
-//AppendEvents adds all the events to the read model.
+// AppendEvents adds all the events to the read model.
// The function doesn't compute the new state of the read model
func (rm *WriteModel) AppendEvents(events ...Event) {
rm.Events = append(rm.Events, events...)
}
-//Reduce is the basic implementaion of reducer
+// Reduce is the basic implementation of reducer
// If this function is extended the extending function should be the last step
func (wm *WriteModel) Reduce() error {
if len(wm.Events) == 0 {
@@ -38,7 +38,7 @@ func (wm *WriteModel) Reduce() error {
}
wm.ProcessedSequence = wm.Events[len(wm.Events)-1].Sequence()
- wm.ChangeDate = wm.Events[len(wm.Events)-1].CreationDate()
+ wm.ChangeDate = wm.Events[len(wm.Events)-1].CreatedAt()
// all events processed and not needed anymore
wm.Events = nil
diff --git a/internal/iam/repository/eventsourcing/model/org_iam_policy.go b/internal/iam/repository/eventsourcing/model/org_iam_policy.go
index 7307de46b9..0ad1624659 100644
--- a/internal/iam/repository/eventsourcing/model/org_iam_policy.go
+++ b/internal/iam/repository/eventsourcing/model/org_iam_policy.go
@@ -1,9 +1,8 @@
package model
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
iam_model "github.com/zitadel/zitadel/internal/iam/model"
)
@@ -32,8 +31,8 @@ func (p *DomainPolicy) Changes(changed *DomainPolicy) map[string]interface{} {
return changes
}
-func (p *DomainPolicy) SetData(event *es_models.Event) error {
- err := json.Unmarshal(event.Data, p)
+func (p *DomainPolicy) SetData(event eventstore.Event) error {
+ err := event.Unmarshal(p)
if err != nil {
return errors.ThrowInternal(err, "EVENT-7JS9d", "unable to unmarshal data")
}
diff --git a/internal/iam/repository/view/model/idp_config.go b/internal/iam/repository/view/model/idp_config.go
index a127458836..b2c41d93cd 100644
--- a/internal/iam/repository/view/model/idp_config.go
+++ b/internal/iam/repository/view/model/idp_config.go
@@ -1,20 +1,17 @@
package model
import (
- "encoding/json"
"time"
- "github.com/zitadel/zitadel/internal/crypto"
- "github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/repository/instance"
- "github.com/zitadel/zitadel/internal/repository/org"
-
"github.com/zitadel/logging"
+ "github.com/zitadel/zitadel/internal/crypto"
+ "github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/iam/model"
+ "github.com/zitadel/zitadel/internal/repository/instance"
+ "github.com/zitadel/zitadel/internal/repository/org"
)
const (
@@ -37,18 +34,18 @@ type IDPConfigView struct {
IDPProviderType int32 `json:"-" gorm:"column:idp_provider_type"`
AutoRegister bool `json:"autoRegister" gorm:"column:auto_register"`
- IsOIDC bool `json:"-" gorm:"column:is_oidc"`
- OIDCClientID string `json:"clientId" gorm:"column:oidc_client_id"`
- OIDCClientSecret *crypto.CryptoValue `json:"clientSecret" gorm:"column:oidc_client_secret"`
- OIDCIssuer string `json:"issuer" gorm:"column:oidc_issuer"`
- OIDCScopes database.StringArray `json:"scopes" gorm:"column:oidc_scopes"`
- OIDCIDPDisplayNameMapping int32 `json:"idpDisplayNameMapping" gorm:"column:oidc_idp_display_name_mapping"`
- OIDCUsernameMapping int32 `json:"usernameMapping" gorm:"column:oidc_idp_username_mapping"`
- OAuthAuthorizationEndpoint string `json:"authorizationEndpoint" gorm:"column:oauth_authorization_endpoint"`
- OAuthTokenEndpoint string `json:"tokenEndpoint" gorm:"column:oauth_token_endpoint"`
- JWTEndpoint string `json:"jwtEndpoint" gorm:"jwt_endpoint"`
- JWTKeysEndpoint string `json:"keysEndpoint" gorm:"jwt_keys_endpoint"`
- JWTHeaderName string `json:"headerName" gorm:"jwt_header_name"`
+ IsOIDC bool `json:"-" gorm:"column:is_oidc"`
+ OIDCClientID string `json:"clientId" gorm:"column:oidc_client_id"`
+ OIDCClientSecret *crypto.CryptoValue `json:"clientSecret" gorm:"column:oidc_client_secret"`
+ OIDCIssuer string `json:"issuer" gorm:"column:oidc_issuer"`
+ OIDCScopes database.TextArray[string] `json:"scopes" gorm:"column:oidc_scopes"`
+ OIDCIDPDisplayNameMapping int32 `json:"idpDisplayNameMapping" gorm:"column:oidc_idp_display_name_mapping"`
+ OIDCUsernameMapping int32 `json:"usernameMapping" gorm:"column:oidc_idp_username_mapping"`
+ OAuthAuthorizationEndpoint string `json:"authorizationEndpoint" gorm:"column:oauth_authorization_endpoint"`
+ OAuthTokenEndpoint string `json:"tokenEndpoint" gorm:"column:oauth_token_endpoint"`
+ JWTEndpoint string `json:"jwtEndpoint" gorm:"jwt_endpoint"`
+ JWTKeysEndpoint string `json:"keysEndpoint" gorm:"jwt_keys_endpoint"`
+ JWTHeaderName string `json:"headerName" gorm:"jwt_header_name"`
Sequence uint64 `json:"-" gorm:"column:sequence"`
InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
@@ -86,13 +83,13 @@ func IDPConfigViewToModel(idp *IDPConfigView) *model.IDPConfigView {
return view
}
-func (i *IDPConfigView) AppendEvent(providerType model.IDPProviderType, event *models.Event) (err error) {
- i.Sequence = event.Sequence
- i.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+func (i *IDPConfigView) AppendEvent(providerType model.IDPProviderType, event eventstore.Event) (err error) {
+ i.Sequence = event.Sequence()
+ i.ChangeDate = event.CreatedAt()
+ switch event.Type() {
case instance.IDPConfigAddedEventType, org.IDPConfigAddedEventType:
i.setRootData(event)
- i.CreationDate = event.CreationDate
+ i.CreationDate = event.CreatedAt()
i.IDPProviderType = int32(providerType)
err = i.SetData(event)
case instance.IDPOIDCConfigAddedEventType, org.IDPOIDCConfigAddedEventType:
@@ -111,13 +108,14 @@ func (i *IDPConfigView) AppendEvent(providerType model.IDPProviderType, event *m
return err
}
-func (r *IDPConfigView) setRootData(event *models.Event) {
- r.AggregateID = event.AggregateID
- r.InstanceID = event.InstanceID
+func (r *IDPConfigView) setRootData(event eventstore.Event) {
+ r.AggregateID = event.Aggregate().ID
+ r.InstanceID = event.Aggregate().InstanceID
}
-func (r *IDPConfigView) SetData(event *models.Event) error {
- if err := json.Unmarshal(event.Data, r); err != nil {
+func (r *IDPConfigView) SetData(event eventstore.Event) error {
+ err := event.Unmarshal(r)
+ if err != nil {
logging.New().WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-lub6s", "Could not unmarshal data")
}
diff --git a/internal/iam/repository/view/model/idp_provider.go b/internal/iam/repository/view/model/idp_provider.go
index 9bb0481f71..775c8ba25e 100644
--- a/internal/iam/repository/view/model/idp_provider.go
+++ b/internal/iam/repository/view/model/idp_provider.go
@@ -1,14 +1,12 @@
package model
import (
- "encoding/json"
"time"
"github.com/zitadel/logging"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/iam/model"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -62,26 +60,26 @@ func IDPProviderViewsToModel(providers []*IDPProviderView) []*model.IDPProviderV
return result
}
-func (i *IDPProviderView) AppendEvent(event *models.Event) (err error) {
- i.Sequence = event.Sequence
- i.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+func (i *IDPProviderView) AppendEvent(event eventstore.Event) (err error) {
+ i.Sequence = event.Sequence()
+ i.ChangeDate = event.CreatedAt()
+ switch event.Type() {
case instance.LoginPolicyIDPProviderAddedEventType,
org.LoginPolicyIDPProviderAddedEventType:
i.setRootData(event)
- i.CreationDate = event.CreationDate
+ i.CreationDate = event.CreatedAt()
err = i.SetData(event)
}
return err
}
-func (r *IDPProviderView) setRootData(event *models.Event) {
- r.AggregateID = event.AggregateID
- r.InstanceID = event.InstanceID
+func (r *IDPProviderView) setRootData(event eventstore.Event) {
+ r.AggregateID = event.Aggregate().ID
+ r.InstanceID = event.Aggregate().InstanceID
}
-func (r *IDPProviderView) SetData(event *models.Event) error {
- if err := json.Unmarshal(event.Data, r); err != nil {
+func (r *IDPProviderView) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(r); err != nil {
logging.New().WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data")
}
diff --git a/internal/iam/repository/view/model/label_policy.go b/internal/iam/repository/view/model/label_policy.go
index e257e3399e..f4fad063b0 100644
--- a/internal/iam/repository/view/model/label_policy.go
+++ b/internal/iam/repository/view/model/label_policy.go
@@ -1,7 +1,6 @@
package model
import (
- "encoding/json"
"time"
"github.com/zitadel/logging"
@@ -83,15 +82,15 @@ func (p *LabelPolicyView) ToDomain() *domain.LabelPolicy {
}
}
-func (i *LabelPolicyView) AppendEvent(event *models.Event) (err error) {
+func (i *LabelPolicyView) AppendEvent(event eventstore.Event) (err error) {
asset := &AssetView{}
- i.Sequence = event.Sequence
- i.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+ i.Sequence = event.Sequence()
+ i.ChangeDate = event.CreatedAt()
+ switch event.Type() {
case instance.LabelPolicyAddedEventType,
org.LabelPolicyAddedEventType:
i.setRootData(event)
- i.CreationDate = event.CreationDate
+ i.CreationDate = event.CreatedAt()
i.State = int32(domain.LabelPolicyStatePreview)
err = i.SetData(event)
case instance.LabelPolicyChangedEventType,
@@ -172,21 +171,21 @@ func (i *LabelPolicyView) AppendEvent(event *models.Event) (err error) {
return err
}
-func (r *LabelPolicyView) setRootData(event *models.Event) {
- r.AggregateID = event.AggregateID
- r.InstanceID = event.InstanceID
+func (r *LabelPolicyView) setRootData(event eventstore.Event) {
+ r.AggregateID = event.Aggregate().ID
+ r.InstanceID = event.Aggregate().InstanceID
}
-func (r *LabelPolicyView) SetData(event *models.Event) error {
- if err := json.Unmarshal(event.Data, r); err != nil {
+func (r *LabelPolicyView) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(r); err != nil {
logging.Log("MODEL-Flp9C").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data")
}
return nil
}
-func (r *AssetView) SetData(event *models.Event) error {
- if err := json.Unmarshal(event.Data, r); err != nil {
+func (r *AssetView) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(r); err != nil {
logging.Log("MODEL-Ms8f2").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data")
}
diff --git a/internal/iam/repository/view/model/password_complexity_policy.go b/internal/iam/repository/view/model/password_complexity_policy.go
index a88603e49b..30f72acb83 100644
--- a/internal/iam/repository/view/model/password_complexity_policy.go
+++ b/internal/iam/repository/view/model/password_complexity_policy.go
@@ -1,14 +1,12 @@
package model
import (
- "encoding/json"
"time"
"github.com/zitadel/logging"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/iam/model"
"github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/repository/instance"
@@ -50,14 +48,14 @@ func PasswordComplexityViewToModel(policy *query.PasswordComplexityPolicy) *mode
}
}
-func (i *PasswordComplexityPolicyView) AppendEvent(event *models.Event) (err error) {
- i.Sequence = event.Sequence
- i.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+func (i *PasswordComplexityPolicyView) AppendEvent(event eventstore.Event) (err error) {
+ i.Sequence = event.Sequence()
+ i.ChangeDate = event.CreatedAt()
+ switch event.Type() {
case instance.PasswordComplexityPolicyAddedEventType,
org.PasswordComplexityPolicyAddedEventType:
i.setRootData(event)
- i.CreationDate = event.CreationDate
+ i.CreationDate = event.CreatedAt()
err = i.SetData(event)
case instance.PasswordComplexityPolicyChangedEventType,
org.PasswordComplexityPolicyChangedEventType:
@@ -66,12 +64,12 @@ func (i *PasswordComplexityPolicyView) AppendEvent(event *models.Event) (err err
return err
}
-func (r *PasswordComplexityPolicyView) setRootData(event *models.Event) {
- r.AggregateID = event.AggregateID
+func (r *PasswordComplexityPolicyView) setRootData(event eventstore.Event) {
+ r.AggregateID = event.Aggregate().ID
}
-func (r *PasswordComplexityPolicyView) SetData(event *models.Event) error {
- if err := json.Unmarshal(event.Data, r); err != nil {
+func (r *PasswordComplexityPolicyView) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(r); err != nil {
logging.Log("EVEN-Dmi9g").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-Hs8uf", "Could not unmarshal data")
}
diff --git a/internal/idp/providers/oauth/session.go b/internal/idp/providers/oauth/session.go
index e85116afac..eb9ab49efe 100644
--- a/internal/idp/providers/oauth/session.go
+++ b/internal/idp/providers/oauth/session.go
@@ -56,8 +56,6 @@ func (s *Session) authorize(ctx context.Context) (err error) {
return ErrCodeMissing
}
s.Tokens, err = rp.CodeExchange[*oidc.IDTokenClaims](ctx, s.Code, s.Provider.RelyingParty)
- if err != nil {
- return err
- }
- return nil
+
+ return err
}
diff --git a/internal/integration/config/postgres.yaml b/internal/integration/config/postgres.yaml
index 0ef4739e25..78866e5424 100644
--- a/internal/integration/config/postgres.yaml
+++ b/internal/integration/config/postgres.yaml
@@ -3,7 +3,8 @@ Database:
Host: localhost
Port: 5432
Database: zitadel
- MaxOpenConns: 20
+ EventPushConnRatio: 0.2
+ MaxOpenConns: 40
MaxIdleConns: 10
User:
Username: zitadel
diff --git a/internal/integration/config/zitadel.yaml b/internal/integration/config/zitadel.yaml
index 22d77a033c..5bf6937af9 100644
--- a/internal/integration/config/zitadel.yaml
+++ b/internal/integration/config/zitadel.yaml
@@ -35,11 +35,14 @@ Quotas:
Enabled: true
Projections:
+ HandleActiveInstances: 60s
Customizations:
NotificationsQuotas:
RequeueEvery: 1s
+ HandleActiveInstances: 60s
Telemetry:
RequeueEvery: 5s
+ HandleActiveInstances: 60s
DefaultInstance:
LoginPolicy:
diff --git a/internal/migration/command.go b/internal/migration/command.go
index 6552ef6ed4..8a296edabd 100644
--- a/internal/migration/command.go
+++ b/internal/migration/command.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/api/service"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
// SetupStep is the command pushed on the eventstore
@@ -35,8 +34,8 @@ func (s *SetupStep) UnmarshalJSON(data []byte) error {
return nil
}
-func setupStartedCmd(migration Migration) eventstore.Command {
- ctx := authz.SetCtxData(service.WithService(context.Background(), "system"), authz.CtxData{UserID: "system", OrgID: "SYSTEM", ResourceOwner: "SYSTEM"})
+func setupStartedCmd(ctx context.Context, migration Migration) eventstore.Command {
+ ctx = authz.SetCtxData(service.WithService(ctx, "system"), authz.CtxData{UserID: "system", OrgID: "SYSTEM", ResourceOwner: "SYSTEM"})
return &SetupStep{
BaseEvent: *eventstore.NewBaseEventForPush(
ctx,
@@ -74,24 +73,24 @@ func setupDoneCmd(ctx context.Context, migration Migration, err error) eventstor
return s
}
-func (s *SetupStep) Data() interface{} {
+func (s *SetupStep) Payload() interface{} {
return s
}
-func (s *SetupStep) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (s *SetupStep) UniqueConstraints() []*eventstore.UniqueConstraint {
switch s.Type() {
case StartedType:
- return []*eventstore.EventUniqueConstraint{
- eventstore.NewAddGlobalEventUniqueConstraint("migration_started", s.migration.String(), "Errors.Step.Started.AlreadyExists"),
+ return []*eventstore.UniqueConstraint{
+ eventstore.NewAddGlobalUniqueConstraint("migration_started", s.migration.String(), "Errors.Step.Started.AlreadyExists"),
}
case failedType,
repeatableDoneType:
- return []*eventstore.EventUniqueConstraint{
- eventstore.NewRemoveGlobalEventUniqueConstraint("migration_started", s.migration.String()),
+ return []*eventstore.UniqueConstraint{
+ eventstore.NewRemoveGlobalUniqueConstraint("migration_started", s.migration.String()),
}
default:
- return []*eventstore.EventUniqueConstraint{
- eventstore.NewAddGlobalEventUniqueConstraint("migration_done", s.migration.String(), "Errors.Step.Done.AlreadyExists"),
+ return []*eventstore.UniqueConstraint{
+ eventstore.NewAddGlobalUniqueConstraint("migration_done", s.migration.String(), "Errors.Step.Done.AlreadyExists"),
}
}
}
@@ -103,14 +102,11 @@ func RegisterMappers(es *eventstore.Eventstore) {
es.RegisterFilterEventMapper(aggregateType, repeatableDoneType, SetupMapper)
}
-func SetupMapper(event *repository.Event) (eventstore.Event, error) {
+func SetupMapper(event eventstore.Event) (eventstore.Event, error) {
step := &SetupStep{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- if len(event.Data) == 0 {
- return step, nil
- }
- err := json.Unmarshal(event.Data, step)
+ err := event.Unmarshal(step)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-hYp7M", "unable to unmarshal step")
}
diff --git a/internal/migration/migration.go b/internal/migration/migration.go
index 63a6cb7b7a..d6e3355164 100644
--- a/internal/migration/migration.go
+++ b/internal/migration/migration.go
@@ -29,6 +29,11 @@ type Migration interface {
Execute(context.Context) error
}
+type errCheckerMigration interface {
+ Migration
+ ContinueOnErr(err error) bool
+}
+
type RepeatableMigration interface {
Migration
SetLastExecution(lastRun map[string]interface{})
@@ -38,20 +43,33 @@ type RepeatableMigration interface {
func Migrate(ctx context.Context, es *eventstore.Eventstore, migration Migration) (err error) {
logging.WithFields("name", migration.String()).Info("verify migration")
- if should, err := checkExec(ctx, es, migration); !should || err != nil {
- return err
+ continueOnErr := func(err error) bool {
+ return false
+ }
+ errChecker, ok := migration.(errCheckerMigration)
+ if ok {
+ continueOnErr = errChecker.ContinueOnErr
}
- if _, err = es.Push(ctx, setupStartedCmd(migration)); err != nil {
+ // if should, err := checkExec(ctx, es, migration); !should || err != nil {
+ should, err := checkExec(ctx, es, migration)
+ if err != nil && !continueOnErr(err) {
+ return err
+ }
+ if !should {
+ return nil
+ }
+
+ if _, err = es.Push(ctx, setupStartedCmd(ctx, migration)); err != nil && !continueOnErr(err) {
return err
}
logging.WithFields("name", migration.String()).Info("starting migration")
err = migration.Execute(ctx)
- logging.OnError(err).Error("migration failed")
+ logging.WithFields("name", migration.String()).OnError(err).Error("migration failed")
_, pushErr := es.Push(ctx, setupDoneCmd(ctx, migration, err))
- logging.OnError(pushErr).Error("migration failed")
+ logging.WithFields("name", migration.String()).OnError(pushErr).Error("migration finish failed")
if err != nil {
return err
}
@@ -127,6 +145,7 @@ func checkExec(ctx context.Context, es *eventstore.Eventstore, migration Migrati
func shouldExec(ctx context.Context, es *eventstore.Eventstore, migration Migration) (should bool, err error) {
events, err := es.Filter(ctx, eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
OrderAsc().
+ InstanceID("").
AddQuery().
AggregateTypes(aggregateType).
AggregateIDs(aggregateID).
diff --git a/internal/notification/handlers/already_handled.go b/internal/notification/handlers/already_handled.go
index 556a3e33c9..9745661ace 100644
--- a/internal/notification/handlers/already_handled.go
+++ b/internal/notification/handlers/already_handled.go
@@ -11,10 +11,10 @@ func (n *NotificationQueries) IsAlreadyHandled(ctx context.Context, event events
ctx,
eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
InstanceID(event.Aggregate().InstanceID).
+ SequenceGreater(event.Sequence()).
AddQuery().
AggregateTypes(aggregateType).
AggregateIDs(event.Aggregate().ID).
- SequenceGreater(event.Sequence()).
EventTypes(eventTypes...).
EventData(data).
Builder(),
diff --git a/internal/notification/handlers/ctx.go b/internal/notification/handlers/ctx.go
index eb74e558a1..9dc6d87b1b 100644
--- a/internal/notification/handlers/ctx.go
+++ b/internal/notification/handlers/ctx.go
@@ -9,7 +9,7 @@ import (
const NotifyUserID = "NOTIFICATION" //TODO: system?
-func HandlerContext(event eventstore.Aggregate) context.Context {
+func HandlerContext(event *eventstore.Aggregate) context.Context {
ctx := authz.WithInstanceID(context.Background(), event.InstanceID)
return authz.SetCtxData(ctx, authz.CtxData{UserID: NotifyUserID, OrgID: event.ResourceOwner})
}
diff --git a/internal/notification/handlers/quota_notifier.go b/internal/notification/handlers/quota_notifier.go
index b8f59a70e1..b149643eab 100644
--- a/internal/notification/handlers/quota_notifier.go
+++ b/internal/notification/handlers/quota_notifier.go
@@ -7,12 +7,10 @@ import (
"github.com/zitadel/zitadel/internal/command"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/notification/channels/webhook"
_ "github.com/zitadel/zitadel/internal/notification/statik"
"github.com/zitadel/zitadel/internal/notification/types"
- "github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/repository/quota"
)
@@ -21,7 +19,6 @@ const (
)
type quotaNotifier struct {
- crdb.StatementHandler
commands *command.Commands
queries *NotificationQueries
channels types.ChannelChains
@@ -29,27 +26,28 @@ type quotaNotifier struct {
func NewQuotaNotifier(
ctx context.Context,
- config crdb.StatementHandlerConfig,
+ config handler.Config,
commands *command.Commands,
queries *NotificationQueries,
channels types.ChannelChains,
-) *quotaNotifier {
- p := new(quotaNotifier)
- config.ProjectionName = QuotaNotificationsProjectionTable
- config.Reducers = p.reducers()
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- p.commands = commands
- p.queries = queries
- p.channels = channels
- projection.NotificationsQuotaProjection = p
- return p
+) *handler.Handler {
+ return handler.NewHandler(ctx, &config, "aNotifier{
+ commands: commands,
+ queries: queries,
+ channels: channels,
+ })
+
}
-func (u *quotaNotifier) reducers() []handler.AggregateReducer {
+func (*quotaNotifier) Name() string {
+ return QuotaNotificationsProjectionTable
+}
+
+func (u *quotaNotifier) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: quota.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: quota.NotificationDueEventType,
Reduce: u.reduceNotificationDue,
@@ -64,21 +62,20 @@ func (u *quotaNotifier) reduceNotificationDue(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-DLxdE", "reduce.wrong.event.type %s", quota.NotificationDueEventType)
}
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.queries.IsAlreadyHandled(ctx, event, map[string]interface{}{"dueEventID": e.ID}, quota.AggregateType, quota.NotifiedEventType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- err = types.SendJSON(ctx, webhook.Config{CallURL: e.CallURL, Method: http.MethodPost}, u.channels, e, e).WithoutTemplate()
- if err != nil {
- return nil, err
- }
- err = u.commands.UsageNotificationSent(ctx, e)
- if err != nil {
- return nil, err
- }
- return crdb.NewNoOpStatement(e), nil
+
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.queries.IsAlreadyHandled(ctx, event, map[string]interface{}{"dueEventID": e.ID}, quota.AggregateType, quota.NotifiedEventType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+ err = types.SendJSON(ctx, webhook.Config{CallURL: e.CallURL, Method: http.MethodPost}, u.channels, e, e).WithoutTemplate()
+ if err != nil {
+ return err
+ }
+ return u.commands.UsageNotificationSent(ctx, e)
+ }), nil
}
diff --git a/internal/notification/handlers/telemetry_pusher.go b/internal/notification/handlers/telemetry_pusher.go
index 5b802a050e..b326bbc961 100644
--- a/internal/notification/handlers/telemetry_pusher.go
+++ b/internal/notification/handlers/telemetry_pusher.go
@@ -3,7 +3,6 @@ package handlers
import (
"context"
"fmt"
- "math"
"net/http"
"time"
@@ -14,13 +13,11 @@ import (
"github.com/zitadel/zitadel/internal/command"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/notification/channels/webhook"
_ "github.com/zitadel/zitadel/internal/notification/statik"
"github.com/zitadel/zitadel/internal/notification/types"
"github.com/zitadel/zitadel/internal/query"
- "github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/repository/milestone"
"github.com/zitadel/zitadel/internal/repository/pseudo"
)
@@ -37,7 +34,6 @@ type TelemetryPusherConfig struct {
}
type telemetryPusher struct {
- crdb.StatementHandler
cfg TelemetryPusherConfig
commands *command.Commands
queries *NotificationQueries
@@ -47,28 +43,33 @@ type telemetryPusher struct {
func NewTelemetryPusher(
ctx context.Context,
telemetryCfg TelemetryPusherConfig,
- handlerCfg crdb.StatementHandlerConfig,
+ handlerCfg handler.Config,
commands *command.Commands,
queries *NotificationQueries,
channels types.ChannelChains,
-) *telemetryPusher {
- p := new(telemetryPusher)
- handlerCfg.ProjectionName = TelemetryProjectionTable
- handlerCfg.Reducers = p.reducers()
- p.cfg = telemetryCfg
- handlerCfg.ConcurrentInstances = math.MaxInt
- p.StatementHandler = crdb.NewStatementHandler(ctx, handlerCfg)
- p.commands = commands
- p.queries = queries
- p.channels = channels
- projection.TelemetryPusherProjection = p
- return p
+) *handler.Handler {
+ pusher := &telemetryPusher{
+ cfg: telemetryCfg,
+ commands: commands,
+ queries: queries,
+ channels: channels,
+ }
+ handlerCfg.TriggerWithoutEvents = pusher.pushMilestones
+ return handler.NewHandler(
+ ctx,
+ &handlerCfg,
+ pusher,
+ )
}
-func (t *telemetryPusher) reducers() []handler.AggregateReducer {
+func (u *telemetryPusher) Name() string {
+ return TelemetryProjectionTable
+}
+
+func (t *telemetryPusher) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{{
Aggregate: pseudo.AggregateType,
- EventRedusers: []handler.EventReducer{{
+ EventReducers: []handler.EventReducer{{
Event: pseudo.ScheduledEventType,
Reduce: t.pushMilestones,
}},
@@ -82,41 +83,42 @@ func (t *telemetryPusher) pushMilestones(event eventstore.Event) (*handler.State
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-lDTs5", "reduce.wrong.event.type %s", event.Type())
}
- isReached, err := query.NewNotNullQuery(query.MilestoneReachedDateColID)
- if err != nil {
- return nil, err
- }
- isNotPushed, err := query.NewIsNullQuery(query.MilestonePushedDateColID)
- if err != nil {
- return nil, err
- }
- hasPrimaryDomain, err := query.NewNotNullQuery(query.MilestonePrimaryDomainColID)
- if err != nil {
- return nil, err
- }
- unpushedMilestones, err := t.queries.Queries.SearchMilestones(ctx, scheduledEvent.InstanceIDs, &query.MilestonesSearchQueries{
- SearchRequest: query.SearchRequest{
- Limit: t.cfg.Limit,
- SortingColumn: query.MilestoneReachedDateColID,
- Asc: true,
- },
- Queries: []query.SearchQuery{isReached, isNotPushed, hasPrimaryDomain},
- })
- if err != nil {
- return nil, err
- }
- var errs int
- for _, ms := range unpushedMilestones.Milestones {
- if err = t.pushMilestone(ctx, scheduledEvent, ms); err != nil {
- errs++
- logging.Warnf("pushing milestone %+v failed: %s", *ms, err.Error())
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ isReached, err := query.NewNotNullQuery(query.MilestoneReachedDateColID)
+ if err != nil {
+ return err
}
- }
- if errs > 0 {
- return nil, fmt.Errorf("pushing %d of %d milestones failed", errs, unpushedMilestones.Count)
- }
-
- return crdb.NewNoOpStatement(scheduledEvent), nil
+ isNotPushed, err := query.NewIsNullQuery(query.MilestonePushedDateColID)
+ if err != nil {
+ return err
+ }
+ hasPrimaryDomain, err := query.NewNotNullQuery(query.MilestonePrimaryDomainColID)
+ if err != nil {
+ return err
+ }
+ unpushedMilestones, err := t.queries.Queries.SearchMilestones(ctx, scheduledEvent.InstanceIDs, &query.MilestonesSearchQueries{
+ SearchRequest: query.SearchRequest{
+ Limit: t.cfg.Limit,
+ SortingColumn: query.MilestoneReachedDateColID,
+ Asc: true,
+ },
+ Queries: []query.SearchQuery{isReached, isNotPushed, hasPrimaryDomain},
+ })
+ if err != nil {
+ return err
+ }
+ var errs int
+ for _, ms := range unpushedMilestones.Milestones {
+ if err = t.pushMilestone(ctx, scheduledEvent, ms); err != nil {
+ errs++
+ logging.Warnf("pushing milestone %+v failed: %s", *ms, err.Error())
+ }
+ }
+ if errs > 0 {
+ return fmt.Errorf("pushing %d of %d milestones failed", errs, unpushedMilestones.Count)
+ }
+ return nil
+ }), nil
}
func (t *telemetryPusher) pushMilestone(ctx context.Context, event *pseudo.ScheduledEvent, ms *query.Milestone) error {
diff --git a/internal/notification/handlers/user_notifier.go b/internal/notification/handlers/user_notifier.go
index 1c60fea8c4..c54cae11d3 100644
--- a/internal/notification/handlers/user_notifier.go
+++ b/internal/notification/handlers/user_notifier.go
@@ -11,11 +11,9 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/notification/types"
"github.com/zitadel/zitadel/internal/query"
- "github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/repository/session"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -25,7 +23,6 @@ const (
)
type userNotifier struct {
- crdb.StatementHandler
commands Commands
queries *NotificationQueries
channels types.ChannelChains
@@ -34,29 +31,29 @@ type userNotifier struct {
func NewUserNotifier(
ctx context.Context,
- config crdb.StatementHandlerConfig,
+ config handler.Config,
commands Commands,
queries *NotificationQueries,
channels types.ChannelChains,
otpEmailTmpl string,
-) *userNotifier {
- p := new(userNotifier)
- config.ProjectionName = UserNotificationsProjectionTable
- config.Reducers = p.reducers()
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- p.commands = commands
- p.queries = queries
- p.channels = channels
- p.otpEmailTmpl = otpEmailTmpl
- projection.NotificationsProjection = p
- return p
+) *handler.Handler {
+ return handler.NewHandler(ctx, &config, &userNotifier{
+ commands: commands,
+ queries: queries,
+ otpEmailTmpl: otpEmailTmpl,
+ channels: channels,
+ })
}
-func (u *userNotifier) reducers() []handler.AggregateReducer {
+func (u *userNotifier) Name() string {
+ return UserNotificationsProjectionTable
+}
+
+func (u *userNotifier) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserV1InitialCodeAddedType,
Reduce: u.reduceInitCodeAdded,
@@ -113,7 +110,7 @@ func (u *userNotifier) reducers() []handler.AggregateReducer {
},
{
Aggregate: session.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: session.OTPSMSChallengedType,
Reduce: u.reduceSessionOTPSMSChallenged,
@@ -132,52 +129,52 @@ func (u *userNotifier) reduceInitCodeAdded(event eventstore.Event) (*handler.Sta
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-EFe2f", "reduce.wrong.event.type %s", user.HumanInitialCodeAddedType)
}
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
- user.UserV1InitialCodeAddedType, user.UserV1InitialCodeSentType,
- user.HumanInitialCodeAddedType, user.HumanInitialCodeSentType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
- if err != nil {
- return nil, err
- }
- colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
- }
- template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
- }
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
+ user.UserV1InitialCodeAddedType, user.UserV1InitialCodeSentType,
+ user.HumanInitialCodeAddedType, user.HumanInitialCodeSentType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+ code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
+ if err != nil {
+ return err
+ }
+ colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
- notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
- if err != nil {
- return nil, err
- }
- translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.InitCodeMessageType)
- if err != nil {
- return nil, err
- }
- ctx, err = u.queries.Origin(ctx, e)
- if err != nil {
- return nil, err
- }
- err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
- SendUserInitCode(ctx, notifyUser, code)
- if err != nil {
- return nil, err
- }
- err = u.commands.HumanInitCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
- if err != nil {
- return nil, err
- }
- return crdb.NewNoOpStatement(e), nil
+ template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
+
+ notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
+ if err != nil {
+ return err
+ }
+ translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.InitCodeMessageType)
+ if err != nil {
+ return err
+ }
+
+ ctx, err = u.queries.Origin(ctx, e)
+ if err != nil {
+ return err
+ }
+ err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
+ SendUserInitCode(ctx, notifyUser, code)
+ if err != nil {
+ return err
+ }
+ return u.commands.HumanInitCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
+ }), nil
}
func (u *userNotifier) reduceEmailCodeAdded(event eventstore.Event) (*handler.Statement, error) {
@@ -187,54 +184,54 @@ func (u *userNotifier) reduceEmailCodeAdded(event eventstore.Event) (*handler.St
}
if e.CodeReturned {
- return crdb.NewNoOpStatement(e), nil
- }
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
- user.UserV1EmailCodeAddedType, user.UserV1EmailCodeSentType,
- user.HumanEmailCodeAddedType, user.HumanEmailCodeSentType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
- if err != nil {
- return nil, err
- }
- colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
+ return handler.NewNoOpStatement(e), nil
}
- template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
- }
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
+ user.UserV1EmailCodeAddedType, user.UserV1EmailCodeSentType,
+ user.HumanEmailCodeAddedType, user.HumanEmailCodeSentType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+ code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
+ if err != nil {
+ return err
+ }
+ colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
- notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
- if err != nil {
- return nil, err
- }
- translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.VerifyEmailMessageType)
- if err != nil {
- return nil, err
- }
- ctx, err = u.queries.Origin(ctx, e)
- if err != nil {
- return nil, err
- }
- err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
- SendEmailVerificationCode(ctx, notifyUser, code, e.URLTemplate)
- if err != nil {
- return nil, err
- }
- err = u.commands.HumanEmailVerificationCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
- if err != nil {
- return nil, err
- }
- return crdb.NewNoOpStatement(e), nil
+ template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
+
+ notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
+ if err != nil {
+ return err
+ }
+ translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.VerifyEmailMessageType)
+ if err != nil {
+ return err
+ }
+
+ ctx, err = u.queries.Origin(ctx, e)
+ if err != nil {
+ return err
+ }
+ err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
+ SendEmailVerificationCode(ctx, notifyUser, code, e.URLTemplate)
+ if err != nil {
+ return err
+ }
+ return u.commands.HumanEmailVerificationCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
+ }), nil
}
func (u *userNotifier) reducePasswordCodeAdded(event eventstore.Event) (*handler.Statement, error) {
@@ -243,57 +240,57 @@ func (u *userNotifier) reducePasswordCodeAdded(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Eeg3s", "reduce.wrong.event.type %s", user.HumanPasswordCodeAddedType)
}
if e.CodeReturned {
- return crdb.NewNoOpStatement(e), nil
- }
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
- user.UserV1PasswordCodeAddedType, user.UserV1PasswordCodeSentType,
- user.HumanPasswordCodeAddedType, user.HumanPasswordCodeSentType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
- if err != nil {
- return nil, err
- }
- colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
+ return handler.NewNoOpStatement(e), nil
}
- template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
- }
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
+ user.UserV1PasswordCodeAddedType, user.UserV1PasswordCodeSentType,
+ user.HumanPasswordCodeAddedType, user.HumanPasswordCodeSentType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+ code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
+ if err != nil {
+ return err
+ }
+ colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
- notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
- if err != nil {
- return nil, err
- }
- translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.PasswordResetMessageType)
- if err != nil {
- return nil, err
- }
- ctx, err = u.queries.Origin(ctx, e)
- if err != nil {
- return nil, err
- }
- notify := types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e)
- if e.NotificationType == domain.NotificationTypeSms {
- notify = types.SendSMSTwilio(ctx, u.channels, translator, notifyUser, colors, e)
- }
- err = notify.SendPasswordCode(ctx, notifyUser, code, e.URLTemplate)
- if err != nil {
- return nil, err
- }
- err = u.commands.PasswordCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
- if err != nil {
- return nil, err
- }
- return crdb.NewNoOpStatement(e), nil
+ template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
+
+ notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
+ if err != nil {
+ return err
+ }
+ translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.PasswordResetMessageType)
+ if err != nil {
+ return err
+ }
+
+ ctx, err = u.queries.Origin(ctx, e)
+ if err != nil {
+ return err
+ }
+ notify := types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e)
+ if e.NotificationType == domain.NotificationTypeSms {
+ notify = types.SendSMSTwilio(ctx, u.channels, translator, notifyUser, colors, e)
+ }
+ err = notify.SendPasswordCode(ctx, notifyUser, code, e.URLTemplate)
+ if err != nil {
+ return err
+ }
+ return u.commands.PasswordCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
+ }), nil
}
func (u *userNotifier) reduceOTPSMSCodeAdded(event eventstore.Event) (*handler.Statement, error) {
@@ -319,7 +316,7 @@ func (u *userNotifier) reduceSessionOTPSMSChallenged(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Sk32L", "reduce.wrong.event.type %s", session.OTPSMSChallengedType)
}
if e.CodeReturned {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
ctx := HandlerContext(event.Aggregate())
s, err := u.queries.SessionByID(ctx, true, e.Aggregate().ID, "")
@@ -353,7 +350,7 @@ func (u *userNotifier) reduceOTPSMS(
return nil, err
}
if alreadyHandled {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
plainCode, err := crypto.DecryptString(code, u.queries.UserDataCrypto)
if err != nil {
@@ -385,7 +382,7 @@ func (u *userNotifier) reduceOTPSMS(
if err != nil {
return nil, err
}
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
func (u *userNotifier) reduceOTPEmailCodeAdded(event eventstore.Event) (*handler.Statement, error) {
@@ -419,7 +416,7 @@ func (u *userNotifier) reduceSessionOTPEmailChallenged(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-zbsgt", "reduce.wrong.event.type %s", session.OTPEmailChallengedType)
}
if e.ReturnCode {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
ctx := HandlerContext(event.Aggregate())
s, err := u.queries.SessionByID(ctx, true, e.Aggregate().ID, "")
@@ -466,7 +463,7 @@ func (u *userNotifier) reduceOTPEmail(
return nil, err
}
if alreadyHandled {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
plainCode, err := crypto.DecryptString(code, u.queries.UserDataCrypto)
if err != nil {
@@ -507,7 +504,7 @@ func (u *userNotifier) reduceOTPEmail(
if err != nil {
return nil, err
}
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
func (u *userNotifier) reduceDomainClaimed(event eventstore.Event) (*handler.Statement, error) {
@@ -515,47 +512,46 @@ func (u *userNotifier) reduceDomainClaimed(event eventstore.Event) (*handler.Sta
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Drh5w", "reduce.wrong.event.type %s", user.UserDomainClaimedType)
}
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.queries.IsAlreadyHandled(ctx, event, nil, user.AggregateType,
- user.UserDomainClaimedType, user.UserDomainClaimedSentType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
- }
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.queries.IsAlreadyHandled(ctx, event, nil, user.AggregateType,
+ user.UserDomainClaimedType, user.UserDomainClaimedSentType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+ colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
- template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
- }
+ template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
- notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
- if err != nil {
- return nil, err
- }
- translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.DomainClaimedMessageType)
- if err != nil {
- return nil, err
- }
- ctx, err = u.queries.Origin(ctx, e)
- if err != nil {
- return nil, err
- }
- err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
- SendDomainClaimed(ctx, notifyUser, e.UserName)
- if err != nil {
- return nil, err
- }
- err = u.commands.UserDomainClaimedSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
- if err != nil {
- return nil, err
- }
- return crdb.NewNoOpStatement(e), nil
+ notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
+ if err != nil {
+ return err
+ }
+ translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.DomainClaimedMessageType)
+ if err != nil {
+ return err
+ }
+
+ ctx, err = u.queries.Origin(ctx, e)
+ if err != nil {
+ return err
+ }
+ err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
+ SendDomainClaimed(ctx, notifyUser, e.UserName)
+ if err != nil {
+ return err
+ }
+ return u.commands.UserDomainClaimedSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
+ }), nil
}
func (u *userNotifier) reducePasswordlessCodeRequested(event eventstore.Event) (*handler.Statement, error) {
@@ -564,52 +560,52 @@ func (u *userNotifier) reducePasswordlessCodeRequested(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-EDtjd", "reduce.wrong.event.type %s", user.HumanPasswordlessInitCodeAddedType)
}
if e.CodeReturned {
- return crdb.NewNoOpStatement(e), nil
- }
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, map[string]interface{}{"id": e.ID}, user.HumanPasswordlessInitCodeSentType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
- if err != nil {
- return nil, err
- }
- colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
+ return handler.NewNoOpStatement(e), nil
}
- template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
- }
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, map[string]interface{}{"id": e.ID}, user.HumanPasswordlessInitCodeSentType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+ code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
+ if err != nil {
+ return err
+ }
+ colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
- notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
- if err != nil {
- return nil, err
- }
- translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.PasswordlessRegistrationMessageType)
- if err != nil {
- return nil, err
- }
- ctx, err = u.queries.Origin(ctx, e)
- if err != nil {
- return nil, err
- }
- err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
- SendPasswordlessRegistrationLink(ctx, notifyUser, code, e.ID, e.URLTemplate)
- if err != nil {
- return nil, err
- }
- err = u.commands.HumanPasswordlessInitCodeSent(ctx, e.Aggregate().ID, e.Aggregate().ResourceOwner, e.ID)
- if err != nil {
- return nil, err
- }
- return crdb.NewNoOpStatement(e), nil
+ template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
+
+ notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
+ if err != nil {
+ return err
+ }
+ translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.PasswordlessRegistrationMessageType)
+ if err != nil {
+ return err
+ }
+
+ ctx, err = u.queries.Origin(ctx, e)
+ if err != nil {
+ return err
+ }
+ err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
+ SendPasswordlessRegistrationLink(ctx, notifyUser, code, e.ID, e.URLTemplate)
+ if err != nil {
+ return err
+ }
+ return u.commands.HumanPasswordlessInitCodeSent(ctx, e.Aggregate().ID, e.Aggregate().ResourceOwner, e.ID)
+ }), nil
}
func (u *userNotifier) reducePasswordChanged(event eventstore.Event) (*handler.Statement, error) {
@@ -617,57 +613,58 @@ func (u *userNotifier) reducePasswordChanged(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Yko2z8", "reduce.wrong.event.type %s", user.HumanPasswordChangedType)
}
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.queries.IsAlreadyHandled(ctx, event, nil, user.AggregateType, user.HumanPasswordChangeSentType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- notificationPolicy, err := u.queries.NotificationPolicyByOrg(ctx, true, e.Aggregate().ResourceOwner, false)
- if errors.IsNotFound(err) {
- return crdb.NewNoOpStatement(e), nil
- }
- if err != nil {
- return nil, err
- }
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.queries.IsAlreadyHandled(ctx, event, nil, user.AggregateType, user.HumanPasswordChangeSentType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+
+ notificationPolicy, err := u.queries.NotificationPolicyByOrg(ctx, true, e.Aggregate().ResourceOwner, false)
+ if errors.IsNotFound(err) {
+ return nil
+ }
+ if err != nil {
+ return err
+ }
+
+ if !notificationPolicy.PasswordChange {
+ return nil
+ }
- if notificationPolicy.PasswordChange {
colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
if err != nil {
- return nil, err
+ return err
}
template, err := u.queries.MailTemplateByOrg(ctx, e.Aggregate().ResourceOwner, false)
if err != nil {
- return nil, err
+ return err
}
notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
if err != nil {
- return nil, err
+ return err
}
translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.PasswordChangeMessageType)
if err != nil {
- return nil, err
+ return err
}
ctx, err = u.queries.Origin(ctx, e)
if err != nil {
- return nil, err
+ return err
}
err = types.SendEmail(ctx, u.channels, string(template.Template), translator, notifyUser, colors, e).
SendPasswordChange(ctx, notifyUser)
if err != nil {
- return nil, err
+ return err
}
- err = u.commands.PasswordChangeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
- if err != nil {
- return nil, err
- }
- }
- return crdb.NewNoOpStatement(e), nil
+ return u.commands.PasswordChangeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
+ }), nil
}
func (u *userNotifier) reducePhoneCodeAdded(event eventstore.Event) (*handler.Statement, error) {
@@ -676,53 +673,53 @@ func (u *userNotifier) reducePhoneCodeAdded(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-He83g", "reduce.wrong.event.type %s", user.HumanPhoneCodeAddedType)
}
if e.CodeReturned {
- return crdb.NewNoOpStatement(e), nil
- }
- ctx := HandlerContext(event.Aggregate())
- alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
- user.UserV1PhoneCodeAddedType, user.UserV1PhoneCodeSentType,
- user.HumanPhoneCodeAddedType, user.HumanPhoneCodeSentType)
- if err != nil {
- return nil, err
- }
- if alreadyHandled {
- return crdb.NewNoOpStatement(e), nil
- }
- code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
- if err != nil {
- return nil, err
- }
- colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
- if err != nil {
- return nil, err
+ return handler.NewNoOpStatement(e), nil
}
- notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
- if err != nil {
- return nil, err
- }
- translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.VerifyPhoneMessageType)
- if err != nil {
- return nil, err
- }
- ctx, err = u.queries.Origin(ctx, e)
- if err != nil {
- return nil, err
- }
- err = types.SendSMSTwilio(ctx, u.channels, translator, notifyUser, colors, e).
- SendPhoneVerificationCode(ctx, code)
- if err != nil {
- return nil, err
- }
- err = u.commands.HumanPhoneVerificationCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
- if err != nil {
- return nil, err
- }
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewStatement(event, func(ex handler.Executer, projectionName string) error {
+ ctx := HandlerContext(event.Aggregate())
+ alreadyHandled, err := u.checkIfCodeAlreadyHandledOrExpired(ctx, event, e.Expiry, nil,
+ user.UserV1PhoneCodeAddedType, user.UserV1PhoneCodeSentType,
+ user.HumanPhoneCodeAddedType, user.HumanPhoneCodeSentType)
+ if err != nil {
+ return err
+ }
+ if alreadyHandled {
+ return nil
+ }
+ code, err := crypto.DecryptString(e.Code, u.queries.UserDataCrypto)
+ if err != nil {
+ return err
+ }
+ colors, err := u.queries.ActiveLabelPolicyByOrg(ctx, e.Aggregate().ResourceOwner, false)
+ if err != nil {
+ return err
+ }
+
+ notifyUser, err := u.queries.GetNotifyUserByID(ctx, true, e.Aggregate().ID, false)
+ if err != nil {
+ return err
+ }
+ translator, err := u.queries.GetTranslatorWithOrgTexts(ctx, notifyUser.ResourceOwner, domain.VerifyPhoneMessageType)
+ if err != nil {
+ return err
+ }
+
+ ctx, err = u.queries.Origin(ctx, e)
+ if err != nil {
+ return err
+ }
+ err = types.SendSMSTwilio(ctx, u.channels, translator, notifyUser, colors, e).
+ SendPhoneVerificationCode(ctx, code)
+ if err != nil {
+ return err
+ }
+ return u.commands.HumanPhoneVerificationCodeSent(ctx, e.Aggregate().ResourceOwner, e.Aggregate().ID)
+ }), nil
}
func (u *userNotifier) checkIfCodeAlreadyHandledOrExpired(ctx context.Context, event eventstore.Event, expiry time.Duration, data map[string]interface{}, eventTypes ...eventstore.EventType) (bool, error) {
- if event.CreationDate().Add(expiry).Before(time.Now().UTC()) {
+ if event.CreatedAt().Add(expiry).Before(time.Now().UTC()) {
return true, nil
}
return u.queries.IsAlreadyHandled(ctx, event, data, user.AggregateType, eventTypes...)
diff --git a/internal/notification/handlers/user_notifier_test.go b/internal/notification/handlers/user_notifier_test.go
index db3569ad2b..797aa7b874 100644
--- a/internal/notification/handlers/user_notifier_test.go
+++ b/internal/notification/handlers/user_notifier_test.go
@@ -72,9 +72,9 @@ func Test_userNotifier_reduceInitCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanInitialCodeAddedEvent{
@@ -111,9 +111,9 @@ func Test_userNotifier_reduceInitCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanInitialCodeAddedEvent{
@@ -144,9 +144,9 @@ func Test_userNotifier_reduceInitCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanInitialCodeAddedEvent{
@@ -184,9 +184,9 @@ func Test_userNotifier_reduceInitCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanInitialCodeAddedEvent{
@@ -210,7 +210,13 @@ func Test_userNotifier_reduceInitCodeAdded(t *testing.T) {
queries := mock.NewMockQueries(ctrl)
commands := mock.NewMockCommands(ctrl)
f, a, w := tt.test(ctrl, queries, commands)
- _, err = newUserNotifier(t, ctrl, queries, fs, f, a, w).reduceInitCodeAdded(a.event)
+ stmt, err := newUserNotifier(t, ctrl, queries, fs, f, a, w).reduceInitCodeAdded(a.event)
+ if w.err != nil {
+ w.err(t, err)
+ } else {
+ assert.NoError(t, err)
+ }
+ err = stmt.Execute(nil, "")
if w.err != nil {
w.err(t, err)
} else {
@@ -241,9 +247,9 @@ func Test_userNotifier_reduceEmailCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanEmailCodeAddedEvent{
@@ -282,9 +288,9 @@ func Test_userNotifier_reduceEmailCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanEmailCodeAddedEvent{
@@ -317,9 +323,9 @@ func Test_userNotifier_reduceEmailCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
@@ -360,9 +366,9 @@ func Test_userNotifier_reduceEmailCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanEmailCodeAddedEvent{
@@ -396,9 +402,9 @@ func Test_userNotifier_reduceEmailCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
@@ -425,7 +431,13 @@ func Test_userNotifier_reduceEmailCodeAdded(t *testing.T) {
queries := mock.NewMockQueries(ctrl)
commands := mock.NewMockCommands(ctrl)
f, a, w := tt.test(ctrl, queries, commands)
- _, err = newUserNotifier(t, ctrl, queries, fs, f, a, w).reduceEmailCodeAdded(a.event)
+ stmt, err := newUserNotifier(t, ctrl, queries, fs, f, a, w).reduceEmailCodeAdded(a.event)
+ if w.err != nil {
+ w.err(t, err)
+ } else {
+ assert.NoError(t, err)
+ }
+ err = stmt.Execute(nil, "")
if w.err != nil {
w.err(t, err)
} else {
@@ -456,9 +468,9 @@ func Test_userNotifier_reducePasswordCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanPasswordCodeAddedEvent{
@@ -497,9 +509,9 @@ func Test_userNotifier_reducePasswordCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanPasswordCodeAddedEvent{
@@ -532,9 +544,9 @@ func Test_userNotifier_reducePasswordCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
@@ -575,9 +587,9 @@ func Test_userNotifier_reducePasswordCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanPasswordCodeAddedEvent{
@@ -611,9 +623,9 @@ func Test_userNotifier_reducePasswordCodeAdded(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
@@ -640,7 +652,13 @@ func Test_userNotifier_reducePasswordCodeAdded(t *testing.T) {
queries := mock.NewMockQueries(ctrl)
commands := mock.NewMockCommands(ctrl)
f, a, w := tt.test(ctrl, queries, commands)
- _, err = newUserNotifier(t, ctrl, queries, fs, f, a, w).reducePasswordCodeAdded(a.event)
+ stmt, err := newUserNotifier(t, ctrl, queries, fs, f, a, w).reducePasswordCodeAdded(a.event)
+ if w.err != nil {
+ w.err(t, err)
+ } else {
+ assert.NoError(t, err)
+ }
+ err = stmt.Execute(nil, "")
if w.err != nil {
w.err(t, err)
} else {
@@ -670,9 +688,9 @@ func Test_userNotifier_reduceDomainClaimed(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
}, args{
event: &user.DomainClaimedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(&repository.Event{
@@ -705,9 +723,9 @@ func Test_userNotifier_reduceDomainClaimed(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
}, args{
event: &user.DomainClaimedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(&repository.Event{
@@ -727,7 +745,13 @@ func Test_userNotifier_reduceDomainClaimed(t *testing.T) {
queries := mock.NewMockQueries(ctrl)
commands := mock.NewMockCommands(ctrl)
f, a, w := tt.test(ctrl, queries, commands)
- _, err = newUserNotifier(t, ctrl, queries, fs, f, a, w).reduceDomainClaimed(a.event)
+ stmt, err := newUserNotifier(t, ctrl, queries, fs, f, a, w).reduceDomainClaimed(a.event)
+ if w.err != nil {
+ w.err(t, err)
+ } else {
+ assert.NoError(t, err)
+ }
+ err = stmt.Execute(nil, "")
if w.err != nil {
w.err(t, err)
} else {
@@ -758,9 +782,9 @@ func Test_userNotifier_reducePasswordlessCodeRequested(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanPasswordlessInitCodeRequestedEvent{
@@ -800,9 +824,9 @@ func Test_userNotifier_reducePasswordlessCodeRequested(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanPasswordlessInitCodeRequestedEvent{
@@ -836,9 +860,9 @@ func Test_userNotifier_reducePasswordlessCodeRequested(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
@@ -880,9 +904,9 @@ func Test_userNotifier_reducePasswordlessCodeRequested(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &user.HumanPasswordlessInitCodeRequestedEvent{
@@ -917,9 +941,9 @@ func Test_userNotifier_reducePasswordlessCodeRequested(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
@@ -947,7 +971,13 @@ func Test_userNotifier_reducePasswordlessCodeRequested(t *testing.T) {
queries := mock.NewMockQueries(ctrl)
commands := mock.NewMockCommands(ctrl)
f, a, w := tt.test(ctrl, queries, commands)
- _, err = newUserNotifier(t, ctrl, queries, fs, f, a, w).reducePasswordlessCodeRequested(a.event)
+ stmt, err := newUserNotifier(t, ctrl, queries, fs, f, a, w).reducePasswordlessCodeRequested(a.event)
+ if w.err != nil {
+ w.err(t, err)
+ } else {
+ assert.NoError(t, err)
+ }
+ err = stmt.Execute(nil, "")
if w.err != nil {
w.err(t, err)
} else {
@@ -980,9 +1010,9 @@ func Test_userNotifier_reducePasswordChanged(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
}, args{
event: &user.HumanPasswordChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(&repository.Event{
@@ -1018,9 +1048,9 @@ func Test_userNotifier_reducePasswordChanged(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
}, args{
event: &user.HumanPasswordChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(&repository.Event{
@@ -1040,7 +1070,13 @@ func Test_userNotifier_reducePasswordChanged(t *testing.T) {
queries := mock.NewMockQueries(ctrl)
commands := mock.NewMockCommands(ctrl)
f, a, w := tt.test(ctrl, queries, commands)
- _, err = newUserNotifier(t, ctrl, queries, fs, f, a, w).reducePasswordChanged(a.event)
+ stmt, err := newUserNotifier(t, ctrl, queries, fs, f, a, w).reducePasswordChanged(a.event)
+ if w.err != nil {
+ w.err(t, err)
+ } else {
+ assert.NoError(t, err)
+ }
+ err = stmt.Execute(nil, "")
if w.err != nil {
w.err(t, err)
} else {
@@ -1072,9 +1108,9 @@ func Test_userNotifier_reduceOTPEmailChallenged(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &session.OTPEmailChallengedEvent{
@@ -1114,9 +1150,9 @@ func Test_userNotifier_reduceOTPEmailChallenged(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &session.OTPEmailChallengedEvent{
@@ -1150,9 +1186,9 @@ func Test_userNotifier_reduceOTPEmailChallenged(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
@@ -1194,9 +1230,9 @@ func Test_userNotifier_reduceOTPEmailChallenged(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
}, args{
event: &session.OTPEmailChallengedEvent{
@@ -1230,9 +1266,9 @@ func Test_userNotifier_reduceOTPEmailChallenged(t *testing.T) {
return fields{
queries: queries,
commands: commands,
- es: eventstore.NewEventstore(eventstore.TestConfig(
- es_repo_mock.NewRepo(t).ExpectFilterEvents(),
- )),
+ es: eventstore.NewEventstore(&eventstore.Config{
+ Querier: es_repo_mock.NewRepo(t).ExpectFilterEvents().MockQuerier,
+ }),
userDataCrypto: codeAlg,
SMSTokenCrypto: nil,
}, args{
diff --git a/internal/notification/projections.go b/internal/notification/projections.go
index f647a8c41b..b2630d2330 100644
--- a/internal/notification/projections.go
+++ b/internal/notification/projections.go
@@ -33,9 +33,9 @@ func Start(
logging.OnError(err).Panic("unable to start listener")
q := handlers.NewNotificationQueries(queries, es, externalDomain, externalPort, externalSecure, fileSystemPath, userEncryption, smtpEncryption, smsEncryption, statikFS)
c := newChannels(q)
- handlers.NewUserNotifier(ctx, projection.ApplyCustomConfig(userHandlerCustomConfig), commands, q, c, otpEmailTmpl).Start()
- handlers.NewQuotaNotifier(ctx, projection.ApplyCustomConfig(quotaHandlerCustomConfig), commands, q, c).Start()
+ handlers.NewUserNotifier(ctx, projection.ApplyCustomConfig(userHandlerCustomConfig), commands, q, c, otpEmailTmpl).Start(ctx)
+ handlers.NewQuotaNotifier(ctx, projection.ApplyCustomConfig(quotaHandlerCustomConfig), commands, q, c).Start(ctx)
if telemetryCfg.Enabled {
- handlers.NewTelemetryPusher(ctx, telemetryCfg, projection.ApplyCustomConfig(telemetryHandlerCustomConfig), commands, q, c).Start()
+ handlers.NewTelemetryPusher(ctx, telemetryCfg, projection.ApplyCustomConfig(telemetryHandlerCustomConfig), commands, q, c).Start(ctx)
}
}
diff --git a/internal/notification/senders/email.go b/internal/notification/senders/email.go
index ea93c0911e..5123798f47 100644
--- a/internal/notification/senders/email.go
+++ b/internal/notification/senders/email.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/logging"
-
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/notification/channels"
"github.com/zitadel/zitadel/internal/notification/channels/fs"
diff --git a/internal/notification/senders/webhook.go b/internal/notification/senders/webhook.go
index d677f9a80e..050168432b 100644
--- a/internal/notification/senders/webhook.go
+++ b/internal/notification/senders/webhook.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/logging"
-
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/notification/channels"
"github.com/zitadel/zitadel/internal/notification/channels/fs"
diff --git a/internal/org/repository/eventsourcing/model/domain.go b/internal/org/repository/eventsourcing/model/domain.go
index 2f1fe880dd..902805772b 100644
--- a/internal/org/repository/eventsourcing/model/domain.go
+++ b/internal/org/repository/eventsourcing/model/domain.go
@@ -1,10 +1,9 @@
package model
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/org/model"
)
@@ -28,18 +27,18 @@ func GetDomain(domains []*OrgDomain, domain string) (int, *OrgDomain) {
return -1, nil
}
-func (o *Org) appendAddDomainEvent(event *es_models.Event) error {
+func (o *Org) appendAddDomainEvent(event eventstore.Event) error {
domain := new(OrgDomain)
err := domain.SetData(event)
if err != nil {
return err
}
- domain.ObjectRoot.CreationDate = event.CreationDate
+ domain.ObjectRoot.CreationDate = event.CreatedAt()
o.Domains = append(o.Domains, domain)
return nil
}
-func (o *Org) appendRemoveDomainEvent(event *es_models.Event) error {
+func (o *Org) appendRemoveDomainEvent(event eventstore.Event) error {
domain := new(OrgDomain)
err := domain.SetData(event)
if err != nil {
@@ -53,7 +52,7 @@ func (o *Org) appendRemoveDomainEvent(event *es_models.Event) error {
return nil
}
-func (o *Org) appendVerifyDomainEvent(event *es_models.Event) error {
+func (o *Org) appendVerifyDomainEvent(event eventstore.Event) error {
domain := new(OrgDomain)
err := domain.SetData(event)
if err != nil {
@@ -66,7 +65,7 @@ func (o *Org) appendVerifyDomainEvent(event *es_models.Event) error {
return nil
}
-func (o *Org) appendPrimaryDomainEvent(event *es_models.Event) error {
+func (o *Org) appendPrimaryDomainEvent(event eventstore.Event) error {
domain := new(OrgDomain)
err := domain.SetData(event)
if err != nil {
@@ -81,7 +80,7 @@ func (o *Org) appendPrimaryDomainEvent(event *es_models.Event) error {
return nil
}
-func (o *Org) appendVerificationDomainEvent(event *es_models.Event) error {
+func (o *Org) appendVerificationDomainEvent(event eventstore.Event) error {
domain := new(OrgDomain)
err := domain.SetData(event)
if err != nil {
@@ -96,8 +95,8 @@ func (o *Org) appendVerificationDomainEvent(event *es_models.Event) error {
return nil
}
-func (m *OrgDomain) SetData(event *es_models.Event) error {
- err := json.Unmarshal(event.Data, m)
+func (m *OrgDomain) SetData(event eventstore.Event) error {
+ err := event.Unmarshal(m)
if err != nil {
return errors.ThrowInternal(err, "EVENT-Hz7Mb", "unable to unmarshal data")
}
diff --git a/internal/org/repository/eventsourcing/model/domain_policy.go b/internal/org/repository/eventsourcing/model/domain_policy.go
index 4451989551..8b504f43ca 100644
--- a/internal/org/repository/eventsourcing/model/domain_policy.go
+++ b/internal/org/repository/eventsourcing/model/domain_policy.go
@@ -1,21 +1,21 @@
package model
import (
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
iam_es_model "github.com/zitadel/zitadel/internal/iam/repository/eventsourcing/model"
)
-func (o *Org) appendAddDomainPolicyEvent(event *es_models.Event) error {
+func (o *Org) appendAddDomainPolicyEvent(event eventstore.Event) error {
o.DomainPolicy = new(iam_es_model.DomainPolicy)
err := o.DomainPolicy.SetData(event)
if err != nil {
return err
}
- o.DomainPolicy.ObjectRoot.CreationDate = event.CreationDate
+ o.DomainPolicy.ObjectRoot.CreationDate = event.CreatedAt()
return nil
}
-func (o *Org) appendChangeDomainPolicyEvent(event *es_models.Event) error {
+func (o *Org) appendChangeDomainPolicyEvent(event eventstore.Event) error {
return o.DomainPolicy.SetData(event)
}
diff --git a/internal/org/repository/eventsourcing/model/org.go b/internal/org/repository/eventsourcing/model/org.go
index f3ebacd856..5de94e4998 100644
--- a/internal/org/repository/eventsourcing/model/org.go
+++ b/internal/org/repository/eventsourcing/model/org.go
@@ -1,8 +1,6 @@
package model
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
@@ -34,7 +32,7 @@ func OrgToModel(org *Org) *org_model.Org {
return converted
}
-func OrgFromEvents(org *Org, events ...*es_models.Event) (*Org, error) {
+func OrgFromEvents(org *Org, events ...eventstore.Event) (*Org, error) {
if org == nil {
org = new(Org)
}
@@ -42,7 +40,7 @@ func OrgFromEvents(org *Org, events ...*es_models.Event) (*Org, error) {
return org, org.AppendEvents(events...)
}
-func (o *Org) AppendEvents(events ...*es_models.Event) error {
+func (o *Org) AppendEvents(events ...eventstore.Event) error {
for _, event := range events {
err := o.AppendEvent(event)
if err != nil {
@@ -52,8 +50,8 @@ func (o *Org) AppendEvents(events ...*es_models.Event) error {
return nil
}
-func (o *Org) AppendEvent(event *es_models.Event) (err error) {
- switch eventstore.EventType(event.Type) {
+func (o *Org) AppendEvent(event eventstore.Event) (err error) {
+ switch event.Type() {
case org.OrgAddedEventType:
err = o.SetData(event)
if err != nil {
@@ -92,8 +90,8 @@ func (o *Org) AppendEvent(event *es_models.Event) (err error) {
return nil
}
-func (o *Org) SetData(event *es_models.Event) error {
- err := json.Unmarshal(event.Data, o)
+func (o *Org) SetData(event eventstore.Event) error {
+ err := event.Unmarshal(o)
if err != nil {
return errors.ThrowInternal(err, "EVENT-BpbQZ", "unable to unmarshal event")
}
diff --git a/internal/org/repository/eventsourcing/model/org_test.go b/internal/org/repository/eventsourcing/model/org_test.go
index 6af1d8af06..af6cd96331 100644
--- a/internal/org/repository/eventsourcing/model/org_test.go
+++ b/internal/org/repository/eventsourcing/model/org_test.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"testing"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/org/model"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -11,7 +12,7 @@ import (
func TestOrgFromEvents(t *testing.T) {
type args struct {
- event []*es_models.Event
+ event []eventstore.Event
org *Org
}
tests := []struct {
@@ -22,8 +23,8 @@ func TestOrgFromEvents(t *testing.T) {
{
name: "org from events, ok",
args: args{
- event: []*es_models.Event{
- {AggregateID: "ID", Sequence: 1, Type: es_models.EventType(org.OrgAddedEventType)},
+ event: []eventstore.Event{
+ &es_models.Event{AggregateID: "ID", Seq: 1, Typ: org.OrgAddedEventType},
},
org: &Org{Name: "OrgName"},
},
@@ -32,8 +33,8 @@ func TestOrgFromEvents(t *testing.T) {
{
name: "org from events, nil org",
args: args{
- event: []*es_models.Event{
- {AggregateID: "ID", Sequence: 1, Type: es_models.EventType(org.OrgAddedEventType)},
+ event: []eventstore.Event{
+ &es_models.Event{AggregateID: "ID", Seq: 1, Typ: org.OrgAddedEventType},
},
org: nil,
},
@@ -44,7 +45,7 @@ func TestOrgFromEvents(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
if tt.args.org != nil {
data, _ := json.Marshal(tt.args.org)
- tt.args.event[0].Data = data
+ tt.args.event[0].(*es_models.Event).Data = data
}
result, _ := OrgFromEvents(tt.args.org, tt.args.event...)
if result.Name != tt.result.Name {
@@ -67,7 +68,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append added event",
args: args{
- event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: es_models.EventType(org.OrgAddedEventType)},
+ event: &es_models.Event{AggregateID: "ID", Seq: 1, Typ: org.OrgAddedEventType},
org: &Org{Name: "OrgName"},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.OrgStateActive), Name: "OrgName"},
@@ -75,7 +76,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append change event",
args: args{
- event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: es_models.EventType(org.OrgChangedEventType), Data: []byte(`{"name": "OrgName}`)},
+ event: &es_models.Event{AggregateID: "ID", Seq: 1, Typ: org.OrgChangedEventType, Data: []byte(`{"name": "OrgName}`)},
org: &Org{Name: "OrgNameChanged"},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.OrgStateActive), Name: "OrgNameChanged"},
@@ -83,14 +84,14 @@ func TestAppendEvent(t *testing.T) {
{
name: "append deactivate event",
args: args{
- event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: es_models.EventType(org.OrgDeactivatedEventType)},
+ event: &es_models.Event{AggregateID: "ID", Seq: 1, Typ: org.OrgDeactivatedEventType},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.OrgStateInactive)},
},
{
name: "append reactivate event",
args: args{
- event: &es_models.Event{AggregateID: "ID", Sequence: 1, Type: es_models.EventType(org.OrgReactivatedEventType)},
+ event: &es_models.Event{AggregateID: "ID", Seq: 1, Typ: org.OrgReactivatedEventType},
},
result: &Org{ObjectRoot: es_models.ObjectRoot{AggregateID: "ID"}, State: int32(model.OrgStateActive)},
},
diff --git a/internal/org/repository/view/query.go b/internal/org/repository/view/query.go
index 765d6abbc8..21b39a2232 100644
--- a/internal/org/repository/view/query.go
+++ b/internal/org/repository/view/query.go
@@ -2,33 +2,34 @@ package view
import (
"github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/org"
)
-func OrgByIDQuery(id, instanceID string, latestSequence uint64) (*es_models.SearchQuery, error) {
+func OrgByIDQuery(id, instanceID string, latestSequence uint64) (*eventstore.SearchQueryBuilder, error) {
if id == "" {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dke74", "id should be filled")
}
- return es_models.NewSearchQuery().
+ return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ InstanceID(instanceID).
+ AwaitOpenTransactions().
+ SequenceGreater(latestSequence).
AddQuery().
- AggregateTypeFilter(org.AggregateType).
- LatestSequenceFilter(latestSequence).
- InstanceIDFilter(instanceID).
- AggregateIDFilter(id).
- EventTypesFilter(
- es_models.EventType(org.OrgAddedEventType),
- es_models.EventType(org.OrgChangedEventType),
- es_models.EventType(org.OrgDeactivatedEventType),
- es_models.EventType(org.OrgReactivatedEventType),
- es_models.EventType(org.OrgDomainAddedEventType),
- es_models.EventType(org.OrgDomainVerificationAddedEventType),
- es_models.EventType(org.OrgDomainVerifiedEventType),
- es_models.EventType(org.OrgDomainPrimarySetEventType),
- es_models.EventType(org.OrgDomainRemovedEventType),
- es_models.EventType(org.DomainPolicyAddedEventType),
- es_models.EventType(org.DomainPolicyChangedEventType),
- es_models.EventType(org.DomainPolicyRemovedEventType),
+ AggregateTypes(org.AggregateType).
+ AggregateIDs(id).
+ EventTypes(
+ org.OrgAddedEventType,
+ org.OrgChangedEventType,
+ org.OrgDeactivatedEventType,
+ org.OrgReactivatedEventType,
+ org.OrgDomainAddedEventType,
+ org.OrgDomainVerificationAddedEventType,
+ org.OrgDomainVerifiedEventType,
+ org.OrgDomainPrimarySetEventType,
+ org.OrgDomainRemovedEventType,
+ org.DomainPolicyAddedEventType,
+ org.DomainPolicyChangedEventType,
+ org.DomainPolicyRemovedEventType,
).
- SearchQuery(), nil
+ Builder(), nil
}
diff --git a/internal/project/repository/eventsourcing/model/oidc_config.go b/internal/project/repository/eventsourcing/model/oidc_config.go
index f051defc51..fb75374aa3 100644
--- a/internal/project/repository/eventsourcing/model/oidc_config.go
+++ b/internal/project/repository/eventsourcing/model/oidc_config.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/project"
)
@@ -75,7 +74,7 @@ func (key *ClientKey) AppendEvents(events ...*es_models.Event) error {
func (key *ClientKey) AppendEvent(event *es_models.Event) (err error) {
key.ObjectRoot.AppendEvent(event)
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case project.ApplicationKeyAddedEventType:
err = json.Unmarshal(event.Data, key)
if err != nil {
diff --git a/internal/project/repository/eventsourcing/model/project.go b/internal/project/repository/eventsourcing/model/project.go
index dfba580f7f..0328500983 100644
--- a/internal/project/repository/eventsourcing/model/project.go
+++ b/internal/project/repository/eventsourcing/model/project.go
@@ -1,8 +1,6 @@
package model
import (
- "encoding/json"
-
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/eventstore"
@@ -41,7 +39,7 @@ func ProjectToModel(project *Project) *model.Project {
}
}
-func ProjectFromEvents(project *Project, events ...*es_models.Event) (*Project, error) {
+func ProjectFromEvents(project *Project, events ...eventstore.Event) (*Project, error) {
if project == nil {
project = &Project{}
}
@@ -49,7 +47,7 @@ func ProjectFromEvents(project *Project, events ...*es_models.Event) (*Project,
return project, project.AppendEvents(events...)
}
-func (p *Project) AppendEvents(events ...*es_models.Event) error {
+func (p *Project) AppendEvents(events ...eventstore.Event) error {
for _, event := range events {
if err := p.AppendEvent(event); err != nil {
return err
@@ -58,10 +56,10 @@ func (p *Project) AppendEvents(events ...*es_models.Event) error {
return nil
}
-func (p *Project) AppendEvent(event *es_models.Event) error {
+func (p *Project) AppendEvent(event eventstore.Event) error {
p.ObjectRoot.AppendEvent(event)
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case project.ProjectAddedType, project.ProjectChangedType:
return p.AppendAddProjectEvent(event)
case project.ProjectDeactivatedType:
@@ -78,7 +76,7 @@ func (p *Project) AppendEvent(event *es_models.Event) error {
return nil
}
-func (p *Project) AppendAddProjectEvent(event *es_models.Event) error {
+func (p *Project) AppendAddProjectEvent(event eventstore.Event) error {
p.SetData(event)
p.State = int32(model.ProjectStateActive)
return nil
@@ -99,18 +97,18 @@ func (p *Project) appendRemovedEvent() error {
return nil
}
-func (p *Project) appendOIDCConfig(event *es_models.Event) error {
+func (p *Project) appendOIDCConfig(event eventstore.Event) error {
appEvent := new(oidcApp)
- if err := json.Unmarshal(event.Data, appEvent); err != nil {
+ if err := event.Unmarshal(p); err != nil {
return err
}
p.OIDCApplications = append(p.OIDCApplications, appEvent)
return nil
}
-func (p *Project) appendApplicationRemoved(event *es_models.Event) error {
+func (p *Project) appendApplicationRemoved(event eventstore.Event) error {
appEvent := new(oidcApp)
- if err := json.Unmarshal(event.Data, appEvent); err != nil {
+ if err := event.Unmarshal(appEvent); err != nil {
return err
}
for i := len(p.OIDCApplications) - 1; i >= 0; i-- {
@@ -124,8 +122,8 @@ func (p *Project) appendApplicationRemoved(event *es_models.Event) error {
return nil
}
-func (p *Project) SetData(event *es_models.Event) error {
- if err := json.Unmarshal(event.Data, p); err != nil {
+func (p *Project) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(p); err != nil {
logging.Log("EVEN-lo9sr").WithError(err).Error("could not unmarshal event data")
return err
}
diff --git a/internal/project/repository/eventsourcing/model/project_test.go b/internal/project/repository/eventsourcing/model/project_test.go
index 8545098153..ad897c5131 100644
--- a/internal/project/repository/eventsourcing/model/project_test.go
+++ b/internal/project/repository/eventsourcing/model/project_test.go
@@ -4,6 +4,7 @@ import (
"encoding/json"
"testing"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/project/model"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -11,7 +12,7 @@ import (
func TestProjectFromEvents(t *testing.T) {
type args struct {
- event []*es_models.Event
+ event []eventstore.Event
project *Project
}
tests := []struct {
@@ -22,8 +23,8 @@ func TestProjectFromEvents(t *testing.T) {
{
name: "project from events, ok",
args: args{
- event: []*es_models.Event{
- {AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType)},
+ event: []eventstore.Event{
+ &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectAddedType},
},
project: &Project{Name: "ProjectName"},
},
@@ -32,8 +33,8 @@ func TestProjectFromEvents(t *testing.T) {
{
name: "project from events, nil project",
args: args{
- event: []*es_models.Event{
- {AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType)},
+ event: []eventstore.Event{
+ &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectAddedType},
},
project: nil,
},
@@ -44,7 +45,7 @@ func TestProjectFromEvents(t *testing.T) {
t.Run(tt.name, func(t *testing.T) {
if tt.args.project != nil {
data, _ := json.Marshal(tt.args.project)
- tt.args.event[0].Data = data
+ tt.args.event[0].(*es_models.Event).Data = data
}
result, _ := ProjectFromEvents(tt.args.project, tt.args.event...)
if result.Name != tt.result.Name {
@@ -67,7 +68,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append added event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType)},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectAddedType},
project: &Project{Name: "ProjectName"},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateActive), Name: "ProjectName"},
@@ -75,7 +76,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append change event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectChangedType)},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectChangedType},
project: &Project{Name: "ProjectName"},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateActive), Name: "ProjectName"},
@@ -83,14 +84,14 @@ func TestAppendEvent(t *testing.T) {
{
name: "append deactivate event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectDeactivatedType)},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectDeactivatedType},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateInactive)},
},
{
name: "append reactivate event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectReactivatedType)},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectReactivatedType},
},
result: &Project{ObjectRoot: es_models.ObjectRoot{AggregateID: "AggregateID"}, State: int32(model.ProjectStateActive)},
},
diff --git a/internal/project/repository/view/model/application.go b/internal/project/repository/view/model/application.go
index f7cfd3b289..8a7dc6db63 100644
--- a/internal/project/repository/view/model/application.go
+++ b/internal/project/repository/view/model/application.go
@@ -10,7 +10,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/project/model"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -37,25 +36,25 @@ type ApplicationView struct {
HasProjectCheck bool `json:"hasProjectCheck" gorm:"column:has_project_check"`
PrivateLabelingSetting domain.PrivateLabelingSetting `json:"privateLabelingSetting" gorm:"column:private_labeling_setting"`
- IsOIDC bool `json:"-" gorm:"column:is_oidc"`
- OIDCVersion int32 `json:"oidcVersion" gorm:"column:oidc_version"`
- OIDCClientID string `json:"clientId" gorm:"column:oidc_client_id"`
- OIDCRedirectUris database.StringArray `json:"redirectUris" gorm:"column:oidc_redirect_uris"`
- OIDCResponseTypes database.EnumArray[domain.OIDCResponseType] `json:"responseTypes" gorm:"column:oidc_response_types"`
- OIDCGrantTypes database.EnumArray[domain.OIDCGrantType] `json:"grantTypes" gorm:"column:oidc_grant_types"`
- OIDCApplicationType int32 `json:"applicationType" gorm:"column:oidc_application_type"`
- OIDCAuthMethodType int32 `json:"authMethodType" gorm:"column:oidc_auth_method_type"`
- OIDCPostLogoutRedirectUris database.StringArray `json:"postLogoutRedirectUris" gorm:"column:oidc_post_logout_redirect_uris"`
- NoneCompliant bool `json:"-" gorm:"column:none_compliant"`
- ComplianceProblems database.StringArray `json:"-" gorm:"column:compliance_problems"`
- DevMode bool `json:"devMode" gorm:"column:dev_mode"`
- OriginAllowList database.StringArray `json:"-" gorm:"column:origin_allow_list"`
- AdditionalOrigins database.StringArray `json:"additionalOrigins" gorm:"column:additional_origins"`
- AccessTokenType int32 `json:"accessTokenType" gorm:"column:access_token_type"`
- AccessTokenRoleAssertion bool `json:"accessTokenRoleAssertion" gorm:"column:access_token_role_assertion"`
- IDTokenRoleAssertion bool `json:"idTokenRoleAssertion" gorm:"column:id_token_role_assertion"`
- IDTokenUserinfoAssertion bool `json:"idTokenUserinfoAssertion" gorm:"column:id_token_userinfo_assertion"`
- ClockSkew time.Duration `json:"clockSkew" gorm:"column:clock_skew"`
+ IsOIDC bool `json:"-" gorm:"column:is_oidc"`
+ OIDCVersion int32 `json:"oidcVersion" gorm:"column:oidc_version"`
+ OIDCClientID string `json:"clientId" gorm:"column:oidc_client_id"`
+ OIDCRedirectUris database.TextArray[string] `json:"redirectUris" gorm:"column:oidc_redirect_uris"`
+ OIDCResponseTypes database.Array[domain.OIDCResponseType] `json:"responseTypes" gorm:"column:oidc_response_types"`
+ OIDCGrantTypes database.Array[domain.OIDCGrantType] `json:"grantTypes" gorm:"column:oidc_grant_types"`
+ OIDCApplicationType int32 `json:"applicationType" gorm:"column:oidc_application_type"`
+ OIDCAuthMethodType int32 `json:"authMethodType" gorm:"column:oidc_auth_method_type"`
+ OIDCPostLogoutRedirectUris database.TextArray[string] `json:"postLogoutRedirectUris" gorm:"column:oidc_post_logout_redirect_uris"`
+ NoneCompliant bool `json:"-" gorm:"column:none_compliant"`
+ ComplianceProblems database.TextArray[string] `json:"-" gorm:"column:compliance_problems"`
+ DevMode bool `json:"devMode" gorm:"column:dev_mode"`
+ OriginAllowList database.TextArray[string] `json:"-" gorm:"column:origin_allow_list"`
+ AdditionalOrigins database.TextArray[string] `json:"additionalOrigins" gorm:"column:additional_origins"`
+ AccessTokenType int32 `json:"accessTokenType" gorm:"column:access_token_type"`
+ AccessTokenRoleAssertion bool `json:"accessTokenRoleAssertion" gorm:"column:access_token_role_assertion"`
+ IDTokenRoleAssertion bool `json:"idTokenRoleAssertion" gorm:"column:id_token_role_assertion"`
+ IDTokenUserinfoAssertion bool `json:"idTokenUserinfoAssertion" gorm:"column:id_token_userinfo_assertion"`
+ ClockSkew time.Duration `json:"clockSkew" gorm:"column:clock_skew"`
IsSAML bool `json:"-" gorm:"column:is_saml"`
Metadata []byte `json:"metadata" gorm:"column:metadata"`
@@ -82,7 +81,7 @@ func OIDCGrantTypesToModel(granttypes []domain.OIDCGrantType) []model.OIDCGrantT
func (a *ApplicationView) AppendEventIfMyApp(event *models.Event) (err error) {
view := new(ApplicationView)
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case project.ApplicationAddedType:
err = view.SetData(event)
if err != nil {
@@ -120,9 +119,9 @@ func (a *ApplicationView) AppendEventIfMyApp(event *models.Event) (err error) {
}
func (a *ApplicationView) AppendEvent(event *models.Event) (err error) {
- a.Sequence = event.Sequence
+ a.Sequence = event.Seq
a.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case project.ApplicationAddedType:
a.setRootData(event)
a.CreationDate = event.CreationDate
@@ -180,7 +179,7 @@ func (a *ApplicationView) SetData(event *models.Event) error {
}
func (a *ApplicationView) setOriginAllowList() error {
- allowList := make(database.StringArray, 0)
+ allowList := make(database.TextArray[string], 0)
for _, redirect := range a.OIDCRedirectUris {
origin, err := http_util.GetOriginFromURLString(redirect)
if err != nil {
diff --git a/internal/project/repository/view/model/application_test.go b/internal/project/repository/view/model/application_test.go
index 30d5a14152..f37e6386b2 100644
--- a/internal/project/repository/view/model/application_test.go
+++ b/internal/project/repository/view/model/application_test.go
@@ -33,7 +33,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append added app event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationAddedType), Data: mockAppData(&es_model.Application{Name: "AppName"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ApplicationAddedType, Data: mockAppData(&es_model.Application{Name: "AppName"})},
app: &ApplicationView{},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
@@ -41,7 +41,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append changed app event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationChangedType), Data: mockAppData(&es_model.Application{Name: "AppNameChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ApplicationChangedType, Data: mockAppData(&es_model.Application{Name: "AppNameChanged"})},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppNameChanged", State: int32(model.AppStateActive)},
@@ -49,7 +49,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append deactivate app event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationDeactivatedType)},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ApplicationDeactivatedType},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateInactive)},
@@ -57,7 +57,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append reactivate app event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ApplicationReactivatedType)},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ApplicationReactivatedType},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateInactive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
@@ -65,7 +65,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append added oidc config event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.OIDCConfigAddedType), Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientID"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.OIDCConfigAddedType, Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientID"})},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", IsOIDC: true, OIDCClientID: "clientID", State: int32(model.AppStateActive)},
@@ -73,7 +73,7 @@ func TestApplicationAppendEvent(t *testing.T) {
{
name: "append changed oidc config event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.OIDCConfigAddedType), Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientIDChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.OIDCConfigAddedType, Data: mockOIDCConfigData(&es_model.OIDCConfig{ClientID: "clientIDChanged"})},
app: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", OIDCClientID: "clientID", State: int32(model.AppStateActive)},
},
result: &ApplicationView{ProjectID: "AggregateID", Name: "AppName", IsOIDC: true, OIDCClientID: "clientIDChanged", State: int32(model.AppStateActive)},
diff --git a/internal/project/repository/view/model/project.go b/internal/project/repository/view/model/project.go
index d1b4e01309..81ccb49298 100644
--- a/internal/project/repository/view/model/project.go
+++ b/internal/project/repository/view/model/project.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/project/model"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -36,8 +35,8 @@ type ProjectView struct {
func (p *ProjectView) AppendEvent(event *models.Event) (err error) {
p.ChangeDate = event.CreationDate
- p.Sequence = event.Sequence
- switch eventstore.EventType(event.Type) {
+ p.Sequence = event.Seq
+ switch event.Type() {
case project.ProjectAddedType:
p.State = int32(model.ProjectStateActive)
p.CreationDate = event.CreationDate
@@ -70,11 +69,7 @@ func (p *ProjectView) setData(event *models.Event) error {
func (p *ProjectView) setProjectData(event *models.Event) error {
project := new(ProjectView)
- err := project.SetData(event)
- if err != nil {
- return err
- }
- return nil
+ return project.SetData(event)
}
func (p *ProjectView) SetData(event *models.Event) error {
diff --git a/internal/project/repository/view/model/project_grant.go b/internal/project/repository/view/model/project_grant.go
index 399e82a610..a8a14113fe 100644
--- a/internal/project/repository/view/model/project_grant.go
+++ b/internal/project/repository/view/model/project_grant.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/project/model"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -24,18 +23,18 @@ const (
)
type ProjectGrantView struct {
- GrantID string `json:"-" gorm:"column:grant_id;primary_key"`
- ProjectID string `json:"-" gorm:"column:project_id"`
- OrgID string `json:"-" gorm:"column:org_id"`
- Name string `json:"name" gorm:"column:project_name"`
- CreationDate time.Time `json:"-" gorm:"column:creation_date"`
- ChangeDate time.Time `json:"-" gorm:"column:change_date"`
- State int32 `json:"-" gorm:"column:project_state"`
- ResourceOwner string `json:"-" gorm:"column:resource_owner"`
- ResourceOwnerName string `json:"-" gorm:"column:resource_owner_name"`
- OrgName string `json:"-" gorm:"column:org_name"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- GrantedRoleKeys database.StringArray `json:"-" gorm:"column:granted_role_keys"`
+ GrantID string `json:"-" gorm:"column:grant_id;primary_key"`
+ ProjectID string `json:"-" gorm:"column:project_id"`
+ OrgID string `json:"-" gorm:"column:org_id"`
+ Name string `json:"name" gorm:"column:project_name"`
+ CreationDate time.Time `json:"-" gorm:"column:creation_date"`
+ ChangeDate time.Time `json:"-" gorm:"column:change_date"`
+ State int32 `json:"-" gorm:"column:project_state"`
+ ResourceOwner string `json:"-" gorm:"column:resource_owner"`
+ ResourceOwnerName string `json:"-" gorm:"column:resource_owner_name"`
+ OrgName string `json:"-" gorm:"column:org_name"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ GrantedRoleKeys database.TextArray[string] `json:"-" gorm:"column:granted_role_keys"`
}
type ProjectGrant struct {
@@ -47,8 +46,8 @@ type ProjectGrant struct {
func (p *ProjectGrantView) AppendEvent(event *models.Event) (err error) {
p.ChangeDate = event.CreationDate
- p.Sequence = event.Sequence
- switch eventstore.EventType(event.Type) {
+ p.Sequence = event.Seq
+ switch event.Type() {
case project.GrantAddedType:
p.State = int32(model.ProjectStateActive)
p.CreationDate = event.CreationDate
diff --git a/internal/project/repository/view/model/project_grant_member.go b/internal/project/repository/view/model/project_grant_member.go
index 1c17022618..7e52a8804a 100644
--- a/internal/project/repository/view/model/project_grant_member.go
+++ b/internal/project/repository/view/model/project_grant_member.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/project"
)
@@ -24,28 +23,28 @@ const (
)
type ProjectGrantMemberView struct {
- UserID string `json:"userId" gorm:"column:user_id;primary_key"`
- GrantID string `json:"grantId" gorm:"column:grant_id;primary_key"`
- ProjectID string `json:"-" gorm:"column:project_id"`
- UserName string `json:"-" gorm:"column:user_name"`
- Email string `json:"-" gorm:"column:email_address"`
- FirstName string `json:"-" gorm:"column:first_name"`
- LastName string `json:"-" gorm:"column:last_name"`
- DisplayName string `json:"-" gorm:"column:display_name"`
- Roles database.StringArray `json:"roles" gorm:"column:roles"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
- AvatarKey string `json:"-" gorm:"column:avatar_key"`
- UserResourceOwner string `json:"-" gorm:"column:user_resource_owner"`
+ UserID string `json:"userId" gorm:"column:user_id;primary_key"`
+ GrantID string `json:"grantId" gorm:"column:grant_id;primary_key"`
+ ProjectID string `json:"-" gorm:"column:project_id"`
+ UserName string `json:"-" gorm:"column:user_name"`
+ Email string `json:"-" gorm:"column:email_address"`
+ FirstName string `json:"-" gorm:"column:first_name"`
+ LastName string `json:"-" gorm:"column:last_name"`
+ DisplayName string `json:"-" gorm:"column:display_name"`
+ Roles database.TextArray[string] `json:"roles" gorm:"column:roles"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
+ AvatarKey string `json:"-" gorm:"column:avatar_key"`
+ UserResourceOwner string `json:"-" gorm:"column:user_resource_owner"`
CreationDate time.Time `json:"-" gorm:"column:creation_date"`
ChangeDate time.Time `json:"-" gorm:"column:change_date"`
}
func (r *ProjectGrantMemberView) AppendEvent(event *models.Event) (err error) {
- r.Sequence = event.Sequence
+ r.Sequence = event.Seq
r.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case project.GrantMemberAddedType:
r.setRootData(event)
r.CreationDate = event.CreationDate
diff --git a/internal/project/repository/view/model/project_grant_member_test.go b/internal/project/repository/view/model/project_grant_member_test.go
index ca9d19be77..57028979ab 100644
--- a/internal/project/repository/view/model/project_grant_member_test.go
+++ b/internal/project/repository/view/model/project_grant_member_test.go
@@ -28,7 +28,7 @@ func TestGrantedProjectMemberAppendEvent(t *testing.T) {
{
name: "append added member event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantMemberAddedType), ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", UserID: "UserID", Roles: []string{"Role"}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.GrantMemberAddedType, ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", UserID: "UserID", Roles: []string{"Role"}})},
member: &ProjectGrantMemberView{},
},
result: &ProjectGrantMemberView{ProjectID: "AggregateID", UserID: "UserID", GrantID: "ProjectGrantID", Roles: []string{"Role"}},
@@ -36,7 +36,7 @@ func TestGrantedProjectMemberAppendEvent(t *testing.T) {
{
name: "append changed member event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantMemberAddedType), ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", Roles: []string{"RoleChanged"}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.GrantMemberAddedType, ResourceOwner: "OrgID", Data: mockProjectGrantMemberData(&es_model.ProjectGrantMember{GrantID: "ProjectGrantID", Roles: []string{"RoleChanged"}})},
member: &ProjectGrantMemberView{ProjectID: "AggregateID", UserID: "UserID", GrantID: "ProjectGrantID", Roles: []string{"Role"}},
},
result: &ProjectGrantMemberView{ProjectID: "AggregateID", UserID: "UserID", GrantID: "ProjectGrantID", Roles: []string{"RoleChanged"}},
diff --git a/internal/project/repository/view/model/project_grant_test.go b/internal/project/repository/view/model/project_grant_test.go
index 9aca2dd927..3f777182b0 100644
--- a/internal/project/repository/view/model/project_grant_test.go
+++ b/internal/project/repository/view/model/project_grant_test.go
@@ -34,7 +34,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append added project grant event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantAddedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", GrantedOrgID: "GrantedOrgID", RoleKeys: []string{"Role"}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.GrantAddedType, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", GrantedOrgID: "GrantedOrgID", RoleKeys: []string{"Role"}})},
project: &ProjectGrantView{},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: []string{"Role"}},
@@ -42,7 +42,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append change project grant event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantChangedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", RoleKeys: []string{"RoleChanged"}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.GrantChangedType, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID", RoleKeys: []string{"RoleChanged"}})},
project: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: []string{"Role"}},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: []string{"RoleChanged"}},
@@ -50,7 +50,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append deactivate project grant event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantDeactivatedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.GrantDeactivatedType, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
project: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: []string{"Role"}},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateInactive), GrantedRoleKeys: []string{"Role"}},
@@ -58,7 +58,7 @@ func TestProjectGrantAppendEvent(t *testing.T) {
{
name: "append reactivate project grant event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.GrantReactivatedType), ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.GrantReactivatedType, ResourceOwner: "GrantedOrgID", Data: mockProjectGrantData(&es_model.ProjectGrant{GrantID: "ProjectGrantID"})},
project: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateInactive), GrantedRoleKeys: []string{"Role"}},
},
result: &ProjectGrantView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", OrgID: "GrantedOrgID", State: int32(model.ProjectStateActive), GrantedRoleKeys: []string{"Role"}},
diff --git a/internal/project/repository/view/model/project_member.go b/internal/project/repository/view/model/project_member.go
index 1cf664a8db..4a20e3da10 100644
--- a/internal/project/repository/view/model/project_member.go
+++ b/internal/project/repository/view/model/project_member.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/project"
)
@@ -23,27 +22,27 @@ const (
)
type ProjectMemberView struct {
- UserID string `json:"userId" gorm:"column:user_id;primary_key"`
- ProjectID string `json:"-" gorm:"column:project_id;primary_key"`
- UserName string `json:"-" gorm:"column:user_name"`
- Email string `json:"-" gorm:"column:email_address"`
- FirstName string `json:"-" gorm:"column:first_name"`
- LastName string `json:"-" gorm:"column:last_name"`
- DisplayName string `json:"-" gorm:"column:display_name"`
- Roles database.StringArray `json:"roles" gorm:"column:roles"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
- AvatarKey string `json:"-" gorm:"column:avatar_key"`
- UserResourceOwner string `json:"-" gorm:"column:user_resource_owner"`
+ UserID string `json:"userId" gorm:"column:user_id;primary_key"`
+ ProjectID string `json:"-" gorm:"column:project_id;primary_key"`
+ UserName string `json:"-" gorm:"column:user_name"`
+ Email string `json:"-" gorm:"column:email_address"`
+ FirstName string `json:"-" gorm:"column:first_name"`
+ LastName string `json:"-" gorm:"column:last_name"`
+ DisplayName string `json:"-" gorm:"column:display_name"`
+ Roles database.TextArray[string] `json:"roles" gorm:"column:roles"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
+ AvatarKey string `json:"-" gorm:"column:avatar_key"`
+ UserResourceOwner string `json:"-" gorm:"column:user_resource_owner"`
CreationDate time.Time `json:"-" gorm:"column:creation_date"`
ChangeDate time.Time `json:"-" gorm:"column:change_date"`
}
func (r *ProjectMemberView) AppendEvent(event *models.Event) (err error) {
- r.Sequence = event.Sequence
+ r.Sequence = event.Seq
r.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case project.MemberAddedType:
r.setRootData(event)
r.CreationDate = event.CreationDate
diff --git a/internal/project/repository/view/model/project_member_test.go b/internal/project/repository/view/model/project_member_test.go
index 0dbee2535d..dff8425665 100644
--- a/internal/project/repository/view/model/project_member_test.go
+++ b/internal/project/repository/view/model/project_member_test.go
@@ -28,7 +28,7 @@ func TestProjectMemberAppendEvent(t *testing.T) {
{
name: "append added member event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.MemberAddedType), ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: []string{"Role"}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.MemberAddedType, ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: []string{"Role"}})},
member: &ProjectMemberView{},
},
result: &ProjectMemberView{ProjectID: "AggregateID", UserID: "UserID", Roles: []string{"Role"}},
@@ -36,7 +36,7 @@ func TestProjectMemberAppendEvent(t *testing.T) {
{
name: "append changed member event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.MemberAddedType), ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: []string{"RoleChanged"}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.MemberAddedType, ResourceOwner: "OrgID", Data: mockProjectMemberData(&es_model.ProjectMember{UserID: "UserID", Roles: []string{"RoleChanged"}})},
member: &ProjectMemberView{ProjectID: "AggregateID", UserID: "UserID", Roles: []string{"Role"}},
},
result: &ProjectMemberView{ProjectID: "AggregateID", UserID: "UserID", Roles: []string{"RoleChanged"}},
diff --git a/internal/project/repository/view/model/project_test.go b/internal/project/repository/view/model/project_test.go
index a1c62fadc9..4731d98f23 100644
--- a/internal/project/repository/view/model/project_test.go
+++ b/internal/project/repository/view/model/project_test.go
@@ -22,7 +22,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append added project event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectAddedType), ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectName"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectAddedType, ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectName"})},
project: &ProjectView{},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},
@@ -30,7 +30,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append change project event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectChangedType), ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectNameChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectChangedType, ResourceOwner: "GrantedOrgID", Data: mockProjectData(&es_model.Project{Name: "ProjectNameChanged"})},
project: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectNameChanged", State: int32(model.ProjectStateActive)},
@@ -38,7 +38,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append project deactivate event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectDeactivatedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectDeactivatedType, ResourceOwner: "GrantedOrgID"},
project: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateInactive)},
@@ -46,7 +46,7 @@ func TestProjectAppendEvent(t *testing.T) {
{
name: "append project reactivate event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(project.ProjectReactivatedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: project.ProjectReactivatedType, ResourceOwner: "GrantedOrgID"},
project: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateInactive)},
},
result: &ProjectView{ProjectID: "AggregateID", ResourceOwner: "GrantedOrgID", Name: "ProjectName", State: int32(model.ProjectStateActive)},
diff --git a/internal/project/repository/view/query.go b/internal/project/repository/view/query.go
index 56c8ae007b..70d7f29e43 100644
--- a/internal/project/repository/view/query.go
+++ b/internal/project/repository/view/query.go
@@ -2,28 +2,29 @@ package view
import (
"github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/project"
)
-func ProjectByIDQuery(id, instanceID string, latestSequence uint64) (*es_models.SearchQuery, error) {
+func ProjectByIDQuery(id, instanceID string, latestSequence uint64) (*eventstore.SearchQueryBuilder, error) {
if id == "" {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-dke74", "Errors.Project.ProjectIDMissing")
}
- return es_models.NewSearchQuery().
+ return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ InstanceID(instanceID).
+ AwaitOpenTransactions().
+ SequenceGreater(latestSequence).
AddQuery().
- AggregateIDFilter(id).
- AggregateTypeFilter(project.AggregateType).
- LatestSequenceFilter(latestSequence).
- InstanceIDFilter(instanceID).
- EventTypesFilter(
- es_models.EventType(project.ProjectAddedType),
- es_models.EventType(project.ProjectChangedType),
- es_models.EventType(project.ProjectDeactivatedType),
- es_models.EventType(project.ProjectReactivatedType),
- es_models.EventType(project.ProjectRemovedType),
- es_models.EventType(project.OIDCConfigAddedType),
- es_models.EventType(project.ApplicationRemovedType),
+ AggregateTypes(project.AggregateType).
+ AggregateIDs(id).
+ EventTypes(
+ project.ProjectAddedType,
+ project.ProjectChangedType,
+ project.ProjectDeactivatedType,
+ project.ProjectReactivatedType,
+ project.ProjectRemovedType,
+ project.OIDCConfigAddedType,
+ project.ApplicationRemovedType,
).
- SearchQuery(), nil
+ Builder(), nil
}
diff --git a/internal/query/access_token.go b/internal/query/access_token.go
index 25121af051..664796d2d2 100644
--- a/internal/query/access_token.go
+++ b/internal/query/access_token.go
@@ -54,6 +54,7 @@ func (wm *OIDCSessionAccessTokenReadModel) Reduce() error {
func (wm *OIDCSessionAccessTokenReadModel) Query() *eventstore.SearchQueryBuilder {
return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
AllowTimeTravel().
AddQuery().
AggregateTypes(oidcsession.AggregateType).
@@ -86,7 +87,7 @@ func (wm *OIDCSessionAccessTokenReadModel) reduceAccessTokenAdded(e *oidcsession
func (wm *OIDCSessionAccessTokenReadModel) reduceTokenRevoked(e eventstore.Event) {
wm.AccessTokenID = ""
- wm.AccessTokenExpiration = e.CreationDate()
+ wm.AccessTokenExpiration = e.CreatedAt()
}
// ActiveAccessTokenByToken will check if the token is active by retrieving the OIDCSession events from the eventstore.
@@ -133,14 +134,15 @@ func (q *Queries) checkSessionNotTerminatedAfter(ctx context.Context, sessionID
defer func() { span.EndWithError(err) }()
events, err := q.eventstore.Filter(ctx, eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
AllowTimeTravel().
+ CreationDateAfter(creation).
AddQuery().
AggregateTypes(session.AggregateType).
AggregateIDs(sessionID).
EventTypes(
session.TerminateType,
).
- CreationDateAfter(creation).
Builder())
if err != nil {
return caos_errs.ThrowPermissionDenied(err, "QUERY-SJ642", "Errors.Internal")
diff --git a/internal/query/action.go b/internal/query/action.go
index 26aee576ec..e2c75e6906 100644
--- a/internal/query/action.go
+++ b/internal/query/action.go
@@ -138,7 +138,7 @@ func (q *Queries) SearchActions(ctx context.Context, queries *ActionSearchQuerie
return nil, errors.ThrowInternal(err, "QUERY-SDfr52", "Errors.Internal")
}
- actions.LatestSequence, err = q.latestSequence(ctx, actionTable)
+ actions.State, err = q.latestState(ctx, actionTable)
return actions, err
}
diff --git a/internal/query/app.go b/internal/query/app.go
index 639b2e141c..48c05bd15c 100644
--- a/internal/query/app.go
+++ b/internal/query/app.go
@@ -14,6 +14,7 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -40,23 +41,23 @@ type App struct {
}
type OIDCApp struct {
- RedirectURIs database.StringArray
- ResponseTypes database.EnumArray[domain.OIDCResponseType]
- GrantTypes database.EnumArray[domain.OIDCGrantType]
+ RedirectURIs database.TextArray[string]
+ ResponseTypes database.Array[domain.OIDCResponseType]
+ GrantTypes database.Array[domain.OIDCGrantType]
AppType domain.OIDCApplicationType
ClientID string
AuthMethodType domain.OIDCAuthMethodType
- PostLogoutRedirectURIs database.StringArray
+ PostLogoutRedirectURIs database.TextArray[string]
Version domain.OIDCVersion
- ComplianceProblems database.StringArray
+ ComplianceProblems database.TextArray[string]
IsDevMode bool
AccessTokenType domain.OIDCTokenType
AssertAccessTokenRole bool
AssertIDTokenRole bool
AssertIDTokenUserinfo bool
ClockSkew time.Duration
- AdditionalOrigins database.StringArray
- AllowedOrigins database.StringArray
+ AdditionalOrigins database.TextArray[string]
+ AllowedOrigins database.TextArray[string]
SkipNativeAppSuccessPage bool
}
@@ -253,7 +254,8 @@ func (q *Queries) AppByProjectAndAppID(ctx context.Context, shouldTriggerBulk bo
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.AppProjection.Trigger(ctx)
+ ctx, err = projection.AppProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := prepareAppQuery(ctx, q.client)
@@ -502,7 +504,7 @@ func (q *Queries) SearchApps(ctx context.Context, queries *AppSearchQueries, wit
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-aJnZL", "Errors.Internal")
}
- apps.LatestSequence, err = q.latestSequence(ctx, appsTable)
+ apps.State, err = q.latestState(ctx, appsTable)
return apps, err
}
@@ -630,7 +632,7 @@ func prepareAppQuery(ctx context.Context, db prepareDatabase) (sq.SelectBuilder,
if errs.Is(err, sql.ErrNoRows) {
return nil, errors.ThrowNotFound(err, "QUERY-pCP8P", "Errors.App.NotExisting")
}
- return nil, errors.ThrowInternal(err, "QUERY-0R2Nw", "Errors.Internal")
+ return nil, errors.ThrowInternal(err, "QUERY-4SJlx", "Errors.Internal")
}
apiConfig.set(app)
@@ -700,7 +702,7 @@ func prepareProjectByAppQuery(ctx context.Context, db prepareDatabase) (sq.Selec
)
if err != nil {
if errs.Is(err, sql.ErrNoRows) {
- return nil, errors.ThrowNotFound(err, "QUERY-fk2fs", "Errors.Project.NotFound")
+ return nil, errors.ThrowNotFound(err, "QUERY-yxTMh", "Errors.Project.NotFound")
}
return nil, errors.ThrowInternal(err, "QUERY-dj2FF", "Errors.Internal")
}
@@ -802,7 +804,7 @@ func prepareAppsQuery(ctx context.Context, db prepareDatabase) (sq.SelectBuilder
)
if err != nil {
- return nil, errors.ThrowInternal(err, "QUERY-0R2Nw", "Errors.Internal")
+ return nil, errors.ThrowInternal(err, "QUERY-XGWAX", "Errors.Internal")
}
apiConfig.set(app)
@@ -824,7 +826,7 @@ func prepareClientIDsQuery(ctx context.Context, db prepareDatabase) (sq.SelectBu
LeftJoin(join(AppAPIConfigColumnAppID, AppColumnID)).
LeftJoin(join(AppOIDCConfigColumnAppID, AppColumnID) + db.Timetravel(call.Took(ctx))).
PlaceholderFormat(sq.Dollar), func(rows *sql.Rows) ([]string, error) {
- ids := database.StringArray{}
+ ids := database.TextArray[string]{}
for rows.Next() {
var apiID sql.NullString
@@ -850,19 +852,19 @@ type sqlOIDCConfig struct {
appID sql.NullString
version sql.NullInt32
clientID sql.NullString
- redirectUris database.StringArray
+ redirectUris database.TextArray[string]
applicationType sql.NullInt16
authMethodType sql.NullInt16
- postLogoutRedirectUris database.StringArray
+ postLogoutRedirectUris database.TextArray[string]
devMode sql.NullBool
accessTokenType sql.NullInt16
accessTokenRoleAssertion sql.NullBool
iDTokenRoleAssertion sql.NullBool
iDTokenUserinfoAssertion sql.NullBool
clockSkew sql.NullInt64
- additionalOrigins database.StringArray
- responseTypes database.EnumArray[domain.OIDCResponseType]
- grantTypes database.EnumArray[domain.OIDCGrantType]
+ additionalOrigins database.TextArray[string]
+ responseTypes database.Array[domain.OIDCResponseType]
+ grantTypes database.Array[domain.OIDCGrantType]
skipNativeAppSuccessPage sql.NullBool
}
diff --git a/internal/query/app_test.go b/internal/query/app_test.go
index ca93baddf5..b98d43a789 100644
--- a/internal/query/app_test.go
+++ b/internal/query/app_test.go
@@ -126,7 +126,7 @@ var (
` LEFT JOIN projections.apps5_saml_configs ON projections.apps5.id = projections.apps5_saml_configs.app_id AND projections.apps5.instance_id = projections.apps5_saml_configs.instance_id` +
` AS OF SYSTEM TIME '-1 ms'`)
- appCols = database.StringArray{
+ appCols = database.TextArray[string]{
"id",
"name",
"project_id",
@@ -420,19 +420,19 @@ func Test_AppsPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
true,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -460,21 +460,21 @@ func Test_AppsPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: true,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -506,19 +506,19 @@ func Test_AppsPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
false,
domain.OIDCTokenTypeJWT,
false,
false,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -546,21 +546,21 @@ func Test_AppsPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: false,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: false,
AssertIDTokenRole: false,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -592,19 +592,19 @@ func Test_AppsPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
false,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -632,21 +632,21 @@ func Test_AppsPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: true,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: false,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -678,19 +678,19 @@ func Test_AppsPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
false,
domain.OIDCTokenTypeJWT,
false,
true,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -718,21 +718,21 @@ func Test_AppsPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: false,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: false,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -764,19 +764,19 @@ func Test_AppsPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
false,
domain.OIDCTokenTypeJWT,
true,
true,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -804,21 +804,21 @@ func Test_AppsPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: false,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -850,19 +850,19 @@ func Test_AppsPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeNative,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
false,
domain.OIDCTokenTypeJWT,
false,
false,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
true,
// saml config
nil,
@@ -890,21 +890,21 @@ func Test_AppsPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeNative,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: false,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: false,
AssertIDTokenRole: false,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: true,
},
},
@@ -936,19 +936,19 @@ func Test_AppsPrepare(t *testing.T) {
"oidc-app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
true,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -1050,21 +1050,21 @@ func Test_AppsPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: true,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -1299,19 +1299,19 @@ func Test_AppPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
true,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -1334,21 +1334,21 @@ func Test_AppPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: true,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -1441,19 +1441,19 @@ func Test_AppPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
false,
domain.OIDCTokenTypeJWT,
true,
true,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -1476,21 +1476,21 @@ func Test_AppPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: false,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -1520,19 +1520,19 @@ func Test_AppPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
true,
domain.OIDCTokenTypeJWT,
false,
true,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -1555,21 +1555,21 @@ func Test_AppPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: true,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: false,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -1599,19 +1599,19 @@ func Test_AppPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
false,
true,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -1634,21 +1634,21 @@ func Test_AppPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: true,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: false,
AssertIDTokenUserinfo: true,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -1678,19 +1678,19 @@ func Test_AppPrepare(t *testing.T) {
"app-id",
domain.OIDCVersionV1,
"oidc-client-id",
- database.StringArray{"https://redirect.to/me"},
- database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ database.TextArray[string]{"https://redirect.to/me"},
+ database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
domain.OIDCApplicationTypeUserAgent,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"post.logout.ch"},
+ database.TextArray[string]{"post.logout.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
true,
false,
1 * time.Second,
- database.StringArray{"additional.origin"},
+ database.TextArray[string]{"additional.origin"},
false,
// saml config
nil,
@@ -1713,21 +1713,21 @@ func Test_AppPrepare(t *testing.T) {
OIDCConfig: &OIDCApp{
Version: domain.OIDCVersionV1,
ClientID: "oidc-client-id",
- RedirectURIs: database.StringArray{"https://redirect.to/me"},
- ResponseTypes: database.EnumArray[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
- GrantTypes: database.EnumArray[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
+ RedirectURIs: database.TextArray[string]{"https://redirect.to/me"},
+ ResponseTypes: database.Array[domain.OIDCResponseType]{domain.OIDCResponseTypeIDTokenToken},
+ GrantTypes: database.Array[domain.OIDCGrantType]{domain.OIDCGrantTypeImplicit},
AppType: domain.OIDCApplicationTypeUserAgent,
AuthMethodType: domain.OIDCAuthMethodTypeNone,
- PostLogoutRedirectURIs: database.StringArray{"post.logout.ch"},
+ PostLogoutRedirectURIs: database.TextArray[string]{"post.logout.ch"},
IsDevMode: true,
AccessTokenType: domain.OIDCTokenTypeJWT,
AssertAccessTokenRole: true,
AssertIDTokenRole: true,
AssertIDTokenUserinfo: false,
ClockSkew: 1 * time.Second,
- AdditionalOrigins: database.StringArray{"additional.origin"},
+ AdditionalOrigins: database.TextArray[string]{"additional.origin"},
ComplianceProblems: nil,
- AllowedOrigins: database.StringArray{"https://redirect.to", "additional.origin"},
+ AllowedOrigins: database.TextArray[string]{"https://redirect.to", "additional.origin"},
SkipNativeAppSuccessPage: false,
},
},
@@ -1786,7 +1786,7 @@ func Test_AppIDsPrepare(t *testing.T) {
want: want{
sqlExpectations: mockQueries(
expectedAppIDsQuery,
- database.StringArray{"client_id", "client_id"},
+ database.TextArray[string]{"client_id", "client_id"},
[][]driver.Value{
{
"app-id",
@@ -1803,7 +1803,7 @@ func Test_AppIDsPrepare(t *testing.T) {
want: want{
sqlExpectations: mockQueries(
expectedAppIDsQuery,
- database.StringArray{"client_id", "client_id"},
+ database.TextArray[string]{"client_id", "client_id"},
[][]driver.Value{
{
nil,
@@ -1878,7 +1878,7 @@ func Test_ProjectIDByAppPrepare(t *testing.T) {
want: want{
sqlExpectations: mockQuery(
expectedProjectIDByAppQuery,
- database.StringArray{"project_id"},
+ database.TextArray[string]{"project_id"},
[]driver.Value{"project-id"},
),
},
diff --git a/internal/query/auth_request.go b/internal/query/auth_request.go
index 334c101c99..2f20ec387a 100644
--- a/internal/query/auth_request.go
+++ b/internal/query/auth_request.go
@@ -8,11 +8,14 @@ import (
"fmt"
"time"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -50,13 +53,14 @@ func (q *Queries) AuthRequestByID(ctx context.Context, shouldTriggerBulk bool, i
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.AuthRequestProjection.Trigger(ctx)
+ ctx, err = projection.AuthRequestProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
var (
- scope database.StringArray
- prompt database.EnumArray[domain.Prompt]
- locales database.StringArray
+ scope database.TextArray[string]
+ prompt database.Array[domain.Prompt]
+ locales database.TextArray[string]
)
dst := new(AuthRequest)
diff --git a/internal/query/auth_request_test.go b/internal/query/auth_request_test.go
index ba23b7315d..4cc52fa8c6 100644
--- a/internal/query/auth_request_test.go
+++ b/internal/query/auth_request_test.go
@@ -63,10 +63,10 @@ func TestQueries_AuthRequestByID(t *testing.T) {
testNow,
"loginClient",
"clientID",
- database.StringArray{"a", "b", "c"},
+ database.TextArray[string]{"a", "b", "c"},
"example.com",
- database.EnumArray[domain.Prompt]{domain.PromptLogin, domain.PromptConsent},
- database.StringArray{"en", "fi"},
+ database.Array[domain.Prompt]{domain.PromptLogin, domain.PromptConsent},
+ database.TextArray[string]{"en", "fi"},
"me@example.com",
int64(time.Minute),
"userID",
@@ -97,10 +97,10 @@ func TestQueries_AuthRequestByID(t *testing.T) {
testNow,
"loginClient",
"clientID",
- database.StringArray{"a", "b", "c"},
+ database.TextArray[string]{"a", "b", "c"},
"example.com",
- database.EnumArray[domain.Prompt]{domain.PromptLogin, domain.PromptConsent},
- database.StringArray{"en", "fi"},
+ database.Array[domain.Prompt]{domain.PromptLogin, domain.PromptConsent},
+ database.TextArray[string]{"en", "fi"},
sql.NullString{},
sql.NullInt64{},
sql.NullString{},
@@ -149,10 +149,10 @@ func TestQueries_AuthRequestByID(t *testing.T) {
testNow,
"wrongLoginClient",
"clientID",
- database.StringArray{"a", "b", "c"},
+ database.TextArray[string]{"a", "b", "c"},
"example.com",
- database.EnumArray[domain.Prompt]{domain.PromptLogin, domain.PromptConsent},
- database.StringArray{"en", "fi"},
+ database.Array[domain.Prompt]{domain.PromptLogin, domain.PromptConsent},
+ database.TextArray[string]{"en", "fi"},
sql.NullString{},
sql.NullInt64{},
sql.NullString{},
diff --git a/internal/query/authn_key.go b/internal/query/authn_key.go
index 2aa3576ad6..2022a94ce9 100644
--- a/internal/query/authn_key.go
+++ b/internal/query/authn_key.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -152,7 +155,7 @@ func (q *Queries) SearchAuthNKeys(ctx context.Context, queries *AuthNKeySearchQu
return nil, errors.ThrowInternal(err, "QUERY-Dbg53", "Errors.Internal")
}
- authNKeys.LatestSequence, err = q.latestSequence(ctx, authNKeyTable)
+ authNKeys.State, err = q.latestState(ctx, authNKeyTable)
return authNKeys, err
}
@@ -181,7 +184,7 @@ func (q *Queries) SearchAuthNKeysData(ctx context.Context, queries *AuthNKeySear
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-Dbi53", "Errors.Internal")
}
- authNKeys.LatestSequence, err = q.latestSequence(ctx, authNKeyTable)
+ authNKeys.State, err = q.latestState(ctx, authNKeyTable)
return authNKeys, err
}
@@ -190,7 +193,8 @@ func (q *Queries) GetAuthNKeyByID(ctx context.Context, shouldTriggerBulk bool, i
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.AuthNKeyProjection.Trigger(ctx)
+ ctx, err = projection.AuthNKeyProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
query, scan := prepareAuthNKeyQuery(ctx, q.client)
diff --git a/internal/query/certificate.go b/internal/query/certificate.go
index 6b5f06ebfa..d43787ff23 100644
--- a/internal/query/certificate.go
+++ b/internal/query/certificate.go
@@ -96,7 +96,7 @@ func (q *Queries) ActiveCertificates(ctx context.Context, t time.Time, usage dom
return nil, errors.ThrowInternal(err, "QUERY-Sgan4", "Errors.Internal")
}
- certs.LatestSequence, err = q.latestSequence(ctx, keyTable)
+ certs.State, err = q.latestState(ctx, keyTable)
if !errors.IsNotFound(err) {
return certs, err
}
diff --git a/internal/query/current_sequence.go b/internal/query/current_sequence.go
deleted file mode 100644
index 50c18a9006..0000000000
--- a/internal/query/current_sequence.go
+++ /dev/null
@@ -1,320 +0,0 @@
-package query
-
-import (
- "context"
- "database/sql"
- errs "errors"
- "fmt"
- "time"
-
- sq "github.com/Masterminds/squirrel"
-
- "github.com/zitadel/zitadel/internal/api/authz"
- "github.com/zitadel/zitadel/internal/api/call"
- "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/query/projection"
- "github.com/zitadel/zitadel/internal/telemetry/tracing"
-)
-
-const (
- lockStmtFormat = "UPDATE %[1]s" +
- " set locker_id = $1, locked_until = now()+$2::INTERVAL" +
- " WHERE projection_name = $3"
- lockerIDReset = "reset"
-)
-
-type LatestSequence struct {
- Sequence uint64
- Timestamp time.Time
-}
-
-type CurrentSequences struct {
- SearchResponse
- CurrentSequences []*CurrentSequence
-}
-
-type CurrentSequence struct {
- ProjectionName string
- CurrentSequence uint64
- Timestamp time.Time
-}
-
-type CurrentSequencesSearchQueries struct {
- SearchRequest
- Queries []SearchQuery
-}
-
-func NewCurrentSequencesInstanceIDSearchQuery(instanceID string) (SearchQuery, error) {
- return NewTextQuery(CurrentSequenceColInstanceID, instanceID, TextEquals)
-}
-
-func (q *CurrentSequencesSearchQueries) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
- query = q.SearchRequest.toQuery(query)
- for _, q := range q.Queries {
- query = q.toQuery(query)
- }
- return query
-}
-
-func (q *Queries) SearchCurrentSequences(ctx context.Context, queries *CurrentSequencesSearchQueries) (failedEvents *CurrentSequences, err error) {
- ctx, span := tracing.NewSpan(ctx)
- defer func() { span.EndWithError(err) }()
-
- query, scan := prepareCurrentSequencesQuery(ctx, q.client)
- stmt, args, err := queries.toQuery(query).ToSql()
- if err != nil {
- return nil, errors.ThrowInvalidArgument(err, "QUERY-MmFef", "Errors.Query.InvalidRequest")
- }
-
- err = q.client.QueryContext(ctx, func(rows *sql.Rows) error {
- failedEvents, err = scan(rows)
- return err
- }, stmt, args...)
- if err != nil {
- return nil, errors.ThrowInternal(err, "QUERY-22H8f", "Errors.Internal")
- }
- return failedEvents, nil
-}
-
-func (q *Queries) latestSequence(ctx context.Context, projections ...table) (seq *LatestSequence, err error) {
- ctx, span := tracing.NewSpan(ctx)
- defer func() { span.EndWithError(err) }()
-
- query, scan := prepareLatestSequence(ctx, q.client)
- or := make(sq.Or, len(projections))
- for i, projection := range projections {
- or[i] = sq.Eq{CurrentSequenceColProjectionName.identifier(): projection.name}
- }
- stmt, args, err := query.
- Where(or).
- Where(sq.Eq{CurrentSequenceColInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}).
- OrderBy(CurrentSequenceColCurrentSequence.identifier() + " DESC").
- ToSql()
- if err != nil {
- return nil, errors.ThrowInternal(err, "QUERY-5CfX9", "Errors.Query.SQLStatement")
- }
-
- err = q.client.QueryRowContext(ctx, func(row *sql.Row) error {
- seq, err = scan(row)
- return err
- }, stmt, args...)
-
- return seq, err
-}
-
-func (q *Queries) ClearCurrentSequence(ctx context.Context, projectionName string) (err error) {
- err = q.checkAndLock(ctx, projectionName)
- if err != nil {
- return err
- }
-
- tx, err := q.client.Begin()
- if err != nil {
- return errors.ThrowInternal(err, "QUERY-9iOpr", "Errors.RemoveFailed")
- }
- tables, err := tablesForReset(ctx, tx, projectionName)
- if err != nil {
- return err
- }
- err = reset(tx, tables, projectionName)
- if err != nil {
- return err
- }
- return tx.Commit()
-}
-
-func (q *Queries) checkAndLock(ctx context.Context, projectionName string) error {
- projectionQuery, args, err := sq.Select("count(*)").
- From("[show tables from projections]").
- Where(
- sq.And{
- sq.NotEq{"table_name": []string{"locks", "current_sequences", "failed_events"}},
- sq.Eq{"concat('projections.', table_name)": projectionName},
- }).
- PlaceholderFormat(sq.Dollar).
- ToSql()
- if err != nil {
- return errors.ThrowInternal(err, "QUERY-Dfwf2", "Errors.ProjectionName.Invalid")
- }
- var count int
- err = q.client.QueryRowContext(ctx, func(row *sql.Row) error {
- if err := row.Scan(&count); err != nil || count == 0 {
- return errors.ThrowInternal(err, "QUERY-ej8fn", "Errors.ProjectionName.Invalid")
- }
- return err
- }, projectionQuery, args...)
- if err != nil {
- return err
- }
-
- lock := fmt.Sprintf(lockStmtFormat, locksTable.identifier())
- if err != nil {
- return errors.ThrowInternal(err, "QUERY-DVfg3", "Errors.RemoveFailed")
- }
- //lock for twice the default duration (10s)
- res, err := q.client.ExecContext(ctx, lock, lockerIDReset, 20*time.Second, projectionName)
- if err != nil {
- return errors.ThrowInternal(err, "QUERY-WEfr2", "Errors.RemoveFailed")
- }
- rows, err := res.RowsAffected()
- if err != nil || rows == 0 {
- return errors.ThrowInternal(err, "QUERY-Bh3ws", "Errors.RemoveFailed")
- }
- time.Sleep(7 * time.Second) //more than half the default lock duration (10s)
- return nil
-}
-
-func tablesForReset(ctx context.Context, tx *sql.Tx, projectionName string) ([]string, error) {
- tablesQuery, args, err := sq.Select("concat('projections.', table_name)").
- From("[show tables from projections]").
- Where(
- sq.And{
- sq.Eq{"type": "table"},
- sq.NotEq{"table_name": []string{"locks", "current_sequences", "failed_events"}},
- sq.Like{"concat('projections.', table_name)": projectionName + "%"},
- }).
- PlaceholderFormat(sq.Dollar).
- ToSql()
- if err != nil {
- return nil, errors.ThrowInternal(err, "QUERY-ASff2", "Errors.ProjectionName.Invalid")
- }
- var tables []string
- rows, err := tx.QueryContext(ctx, tablesQuery, args...)
- if err != nil {
- return nil, errors.ThrowInternal(err, "QUERY-Dgfw", "Errors.ProjectionName.Invalid")
- }
- for rows.Next() {
- var tableName string
- if err := rows.Scan(&tableName); err != nil {
- return nil, errors.ThrowInternal(err, "QUERY-ej8fn", "Errors.ProjectionName.Invalid")
- }
- tables = append(tables, tableName)
- }
- return tables, nil
-}
-
-func reset(tx *sql.Tx, tables []string, projectionName string) error {
- for _, tableName := range tables {
- _, err := tx.Exec(fmt.Sprintf("TRUNCATE %s cascade", tableName))
- if err != nil {
- return errors.ThrowInternal(err, "QUERY-3n92f", "Errors.RemoveFailed")
- }
- }
- update, args, err := sq.Update(currentSequencesTable.identifier()).
- Set(CurrentSequenceColCurrentSequence.name, 0).
- Where(sq.Eq{CurrentSequenceColProjectionName.name: projectionName}).
- PlaceholderFormat(sq.Dollar).
- ToSql()
- if err != nil {
- return errors.ThrowInternal(err, "QUERY-Ff3tw", "Errors.RemoveFailed")
- }
- _, err = tx.Exec(update, args...)
- if err != nil {
- return errors.ThrowInternal(err, "QUERY-NFiws", "Errors.RemoveFailed")
- }
- return nil
-}
-
-func prepareLatestSequence(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Row) (*LatestSequence, error)) {
- return sq.Select(
- CurrentSequenceColCurrentSequence.identifier(),
- CurrentSequenceColTimestamp.identifier()).
- From(currentSequencesTable.identifier() + db.Timetravel(call.Took(ctx))).
- PlaceholderFormat(sq.Dollar),
- func(row *sql.Row) (*LatestSequence, error) {
- seq := new(LatestSequence)
- err := row.Scan(
- &seq.Sequence,
- &seq.Timestamp,
- )
- if err != nil && !errs.Is(err, sql.ErrNoRows) {
- return nil, errors.ThrowInternal(err, "QUERY-aAZ1D", "Errors.Internal")
- }
- return seq, nil
- }
-}
-
-func prepareCurrentSequencesQuery(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Rows) (*CurrentSequences, error)) {
- return sq.Select(
- "max("+CurrentSequenceColCurrentSequence.identifier()+") as "+CurrentSequenceColCurrentSequence.name,
- "max("+CurrentSequenceColTimestamp.identifier()+") as "+CurrentSequenceColTimestamp.name,
- CurrentSequenceColProjectionName.identifier(),
- countColumn.identifier()).
- From(currentSequencesTable.identifier() + db.Timetravel(call.Took(ctx))).
- GroupBy(CurrentSequenceColProjectionName.identifier()).
- PlaceholderFormat(sq.Dollar),
- func(rows *sql.Rows) (*CurrentSequences, error) {
- currentSequences := make([]*CurrentSequence, 0)
- var count uint64
- for rows.Next() {
- currentSequence := new(CurrentSequence)
- err := rows.Scan(
- ¤tSequence.CurrentSequence,
- ¤tSequence.Timestamp,
- ¤tSequence.ProjectionName,
- &count,
- )
- if err != nil {
- return nil, err
- }
- currentSequences = append(currentSequences, currentSequence)
- }
-
- if err := rows.Close(); err != nil {
- return nil, errors.ThrowInternal(err, "QUERY-jbJ77", "Errors.Query.CloseRows")
- }
-
- return &CurrentSequences{
- CurrentSequences: currentSequences,
- SearchResponse: SearchResponse{
- Count: count,
- },
- }, nil
- }
-}
-
-var (
- currentSequencesTable = table{
- name: projection.CurrentSeqTable,
- instanceIDCol: "instance_id",
- }
- CurrentSequenceColAggregateType = Column{
- name: "aggregate_type",
- table: currentSequencesTable,
- }
- CurrentSequenceColCurrentSequence = Column{
- name: "current_sequence",
- table: currentSequencesTable,
- }
- CurrentSequenceColTimestamp = Column{
- name: "timestamp",
- table: currentSequencesTable,
- }
- CurrentSequenceColProjectionName = Column{
- name: "projection_name",
- table: currentSequencesTable,
- }
- CurrentSequenceColInstanceID = Column{
- name: "instance_id",
- table: currentSequencesTable,
- }
-)
-
-var (
- locksTable = table{
- name: projection.LocksTable,
- instanceIDCol: "instance_id",
- }
- LocksColLockerID = Column{
- name: "locker_id",
- table: locksTable,
- }
- LocksColUntil = Column{
- name: "locked_until",
- table: locksTable,
- }
- LocksColProjectionName = Column{
- name: "projection_name",
- table: locksTable,
- }
-)
diff --git a/internal/query/current_state.go b/internal/query/current_state.go
new file mode 100644
index 0000000000..2c42e97bde
--- /dev/null
+++ b/internal/query/current_state.go
@@ -0,0 +1,378 @@
+package query
+
+import (
+ "context"
+ "database/sql"
+ _ "embed"
+ errs "errors"
+ "fmt"
+ "strings"
+ "time"
+
+ sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
+ "github.com/zitadel/zitadel/internal/api/authz"
+ "github.com/zitadel/zitadel/internal/api/call"
+ "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/query/projection"
+ "github.com/zitadel/zitadel/internal/telemetry/tracing"
+)
+
+type State struct {
+ LastRun time.Time
+
+ Position float64
+ EventCreatedAt time.Time
+ AggregateID string
+ AggregateType eventstore.AggregateType
+ Sequence uint64
+}
+
+type CurrentStates struct {
+ SearchResponse
+ CurrentStates []*CurrentState
+}
+
+type CurrentState struct {
+ ProjectionName string
+ State
+}
+
+type CurrentStateSearchQueries struct {
+ SearchRequest
+ Queries []SearchQuery
+}
+
+func NewCurrentStatesInstanceIDSearchQuery(instanceID string) (SearchQuery, error) {
+ return NewTextQuery(CurrentStateColInstanceID, instanceID, TextEquals)
+}
+
+func NewCurrentStatesProjectionSearchQuery(projection string) (SearchQuery, error) {
+ return NewTextQuery(CurrentStateColProjectionName, projection, TextEquals)
+}
+
+func (q *CurrentStateSearchQueries) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
+ query = q.SearchRequest.toQuery(query)
+ for _, q := range q.Queries {
+ query = q.toQuery(query)
+ }
+ return query
+}
+
+func (q *Queries) SearchCurrentStates(ctx context.Context, queries *CurrentStateSearchQueries) (currentStates *CurrentStates, err error) {
+ ctx, span := tracing.NewSpan(ctx)
+ defer func() { span.EndWithError(err) }()
+
+ query, scan := prepareCurrentStateQuery(ctx, q.client)
+ stmt, args, err := queries.toQuery(query).ToSql()
+ if err != nil {
+ return nil, errors.ThrowInvalidArgument(err, "QUERY-MmFef", "Errors.Query.InvalidRequest")
+ }
+
+ err = q.client.QueryContext(ctx, func(rows *sql.Rows) error {
+ currentStates, err = scan(rows)
+ return err
+ }, stmt, args...)
+ if err != nil {
+ return nil, errors.ThrowInternal(err, "QUERY-22H8f", "Errors.Internal")
+ }
+
+ return currentStates, nil
+}
+
+func (q *Queries) latestState(ctx context.Context, projections ...table) (state *State, err error) {
+ ctx, span := tracing.NewSpan(ctx)
+ defer func() { span.EndWithError(err) }()
+
+ query, scan := prepareLatestState(ctx, q.client)
+ or := make(sq.Or, len(projections))
+ for i, projection := range projections {
+ or[i] = sq.Eq{CurrentStateColProjectionName.identifier(): projection.name}
+ }
+ stmt, args, err := query.
+ Where(or).
+ Where(sq.Eq{CurrentStateColInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}).
+ OrderBy(CurrentStateColEventDate.identifier() + " DESC").
+ ToSql()
+ if err != nil {
+ return nil, errors.ThrowInternal(err, "QUERY-5CfX9", "Errors.Query.SQLStatement")
+ }
+
+ err = q.client.QueryRowContext(ctx, func(row *sql.Row) error {
+ state, err = scan(row)
+ return err
+ }, stmt, args...)
+
+ return state, err
+}
+
+func (q *Queries) ClearCurrentSequence(ctx context.Context, projectionName string) (err error) {
+ tx, err := q.client.Begin()
+ if err != nil {
+ return errors.ThrowInternal(err, "QUERY-9iOpr", "Errors.RemoveFailed")
+ }
+ defer func() {
+ if err != nil {
+ rollbackErr := tx.Rollback()
+ logging.OnError(rollbackErr).Debug("rollback failed")
+ return
+ }
+ if commitErr := tx.Commit(); commitErr != nil {
+ err = errors.ThrowInternal(commitErr, "QUERY-JGD0l", "Errors.Internal")
+ }
+ }()
+
+ name, err := q.checkAndLock(tx, projectionName)
+ if err != nil {
+ return err
+ }
+
+ tables, err := tablesForReset(ctx, tx, name)
+ if err != nil {
+ return err
+ }
+ err = reset(ctx, tx, tables, name)
+ if err != nil {
+ return err
+ }
+ err = tx.Commit()
+ if err != nil {
+ return errors.ThrowInternal(err, "QUERY-Sfvsc", "Errors.Internal")
+ }
+ return nil
+}
+
+func (q *Queries) checkAndLock(tx *sql.Tx, projectionName string) (name string, err error) {
+ stmt, args, err := sq.Select(CurrentStateColProjectionName.identifier()).
+ From(currentStateTable.identifier()).
+ Where(sq.Eq{
+ CurrentStateColProjectionName.identifier(): projectionName,
+ }).Suffix("FOR UPDATE").
+ PlaceholderFormat(sq.Dollar).
+ ToSql()
+ if err != nil {
+ return "", errors.ThrowInternal(err, "QUERY-UJTUy", "Errors.Internal")
+ }
+ row := tx.QueryRow(stmt, args...)
+ if err := row.Scan(&name); err != nil || name == "" {
+ return "", errors.ThrowInternal(err, "QUERY-ej8fn", "Errors.ProjectionName.Invalid")
+ }
+ return name, nil
+}
+
+func tablesForReset(ctx context.Context, tx *sql.Tx, projectionName string) (tables []string, err error) {
+ names := strings.Split(projectionName, ".")
+ if len(names) != 2 {
+ return nil, errors.ThrowInvalidArgument(nil, "QUERY-wk1jr", "Errors.InvalidArgument")
+ }
+ schema := names[0]
+ tablePrefix := names[1]
+
+ tablesQuery, args, err := sq.Select("table_name").
+ From("[show tables from " + schema + "]").
+ Where(
+ sq.And{
+ sq.Eq{"type": "table"},
+ sq.NotEq{"table_name": []string{"locks", "current_sequences", "current_states", "failed_events", "failed_events2"}},
+ sq.Like{"table_name": tablePrefix + "%"},
+ }).
+ PlaceholderFormat(sq.Dollar).
+ ToSql()
+ if err != nil {
+ return nil, errors.ThrowInternal(err, "QUERY-ASff2", "Errors.ProjectionName.Invalid")
+ }
+
+ rows, err := tx.QueryContext(ctx, tablesQuery, args...)
+ if err != nil {
+ return nil, errors.ThrowInternal(err, "QUERY-Dgfw", "Errors.ProjectionName.Invalid")
+ }
+ defer rows.Close()
+
+ for rows.Next() {
+ var tableName string
+ if err := rows.Scan(&tableName); err != nil {
+ return nil, errors.ThrowInternal(err, "QUERY-ej8fn", "Errors.ProjectionName.Invalid")
+ }
+ tables = append(tables, schema+"."+tableName)
+ }
+
+ if err := rows.Err(); err != nil {
+ return nil, err
+ }
+
+ return tables, nil
+}
+
+func reset(ctx context.Context, tx *sql.Tx, tables []string, projectionName string) error {
+ for _, tableName := range tables {
+ _, err := tx.Exec(fmt.Sprintf("TRUNCATE %s cascade", tableName))
+ if err != nil {
+ return errors.ThrowInternal(err, "QUERY-3n92f", "Errors.RemoveFailed")
+ }
+ }
+ update, args, err := sq.Update(currentStateTable.identifier()).
+ Set(CurrentStateColEventDate.name, 0).
+ Where(sq.Eq{
+ CurrentStateColProjectionName.name: projectionName,
+ }).
+ PlaceholderFormat(sq.Dollar).
+ ToSql()
+ if err != nil {
+ return errors.ThrowInternal(err, "QUERY-Ff3tw", "Errors.RemoveFailed")
+ }
+ _, err = tx.Exec(update, args...)
+ if err != nil {
+ return errors.ThrowInternal(err, "QUERY-NFiws", "Errors.RemoveFailed")
+ }
+ return nil
+}
+
+func prepareLatestState(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Row) (*State, error)) {
+ return sq.Select(
+ CurrentStateColEventDate.identifier(),
+ CurrentStateColPosition.identifier(),
+ CurrentStateColLastUpdated.identifier()).
+ From(currentStateTable.identifier() + db.Timetravel(call.Took(ctx))).
+ PlaceholderFormat(sq.Dollar),
+ func(row *sql.Row) (*State, error) {
+ var (
+ creationDate sql.NullTime
+ lastUpdated sql.NullTime
+ position sql.NullFloat64
+ )
+ err := row.Scan(
+ &creationDate,
+ &position,
+ &lastUpdated,
+ )
+ if err != nil && !errs.Is(err, sql.ErrNoRows) {
+ return nil, errors.ThrowInternal(err, "QUERY-aAZ1D", "Errors.Internal")
+ }
+ return &State{
+ EventCreatedAt: creationDate.Time,
+ LastRun: lastUpdated.Time,
+ Position: position.Float64,
+ }, nil
+ }
+}
+
+func prepareCurrentStateQuery(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Rows) (*CurrentStates, error)) {
+ return sq.Select(
+ CurrentStateColLastUpdated.identifier(),
+ CurrentStateColEventDate.identifier(),
+ CurrentStateColPosition.identifier(),
+ CurrentStateColProjectionName.identifier(),
+ CurrentStateColAggregateType.identifier(),
+ CurrentStateColAggregateID.identifier(),
+ CurrentStateColSequence.identifier(),
+ countColumn.identifier()).
+ From(currentStateTable.identifier() + db.Timetravel(call.Took(ctx))).
+ PlaceholderFormat(sq.Dollar),
+ func(rows *sql.Rows) (*CurrentStates, error) {
+ states := make([]*CurrentState, 0)
+ var count uint64
+ for rows.Next() {
+ currentState := new(CurrentState)
+ var (
+ lastRun sql.NullTime
+ eventDate sql.NullTime
+ currentPosition sql.NullFloat64
+ aggregateType sql.NullString
+ aggregateID sql.NullString
+ sequence sql.NullInt64
+ )
+
+ err := rows.Scan(
+ &lastRun,
+ &eventDate,
+ ¤tPosition,
+ ¤tState.ProjectionName,
+ &aggregateType,
+ &aggregateID,
+ &sequence,
+ &count,
+ )
+ if err != nil {
+ return nil, err
+ }
+ currentState.State.EventCreatedAt = eventDate.Time
+ currentState.State.LastRun = lastRun.Time
+ currentState.Position = currentPosition.Float64
+ currentState.AggregateType = eventstore.AggregateType(aggregateType.String)
+ currentState.AggregateID = aggregateID.String
+ currentState.Sequence = uint64(sequence.Int64)
+ states = append(states, currentState)
+ }
+
+ if err := rows.Close(); err != nil {
+ return nil, errors.ThrowInternal(err, "QUERY-jbJ77", "Errors.Query.CloseRows")
+ }
+
+ return &CurrentStates{
+ CurrentStates: states,
+ SearchResponse: SearchResponse{
+ Count: count,
+ },
+ }, nil
+ }
+}
+
+var (
+ currentStateTable = table{
+ name: projection.CurrentStateTable,
+ instanceIDCol: "instance_id",
+ }
+ CurrentStateColEventDate = Column{
+ name: "event_date",
+ table: currentStateTable,
+ }
+ CurrentStateColPosition = Column{
+ name: "position",
+ table: currentStateTable,
+ }
+ CurrentStateColAggregateType = Column{
+ name: "aggregate_type",
+ table: currentStateTable,
+ }
+ CurrentStateColAggregateID = Column{
+ name: "aggregate_id",
+ table: currentStateTable,
+ }
+ CurrentStateColSequence = Column{
+ name: "sequence",
+ table: currentStateTable,
+ }
+ CurrentStateColLastUpdated = Column{
+ name: "last_updated",
+ table: currentStateTable,
+ }
+ CurrentStateColProjectionName = Column{
+ name: "projection_name",
+ table: currentStateTable,
+ }
+ CurrentStateColInstanceID = Column{
+ name: "instance_id",
+ table: currentStateTable,
+ }
+)
+
+var (
+ locksTable = table{
+ name: projection.LocksTable,
+ instanceIDCol: "instance_id",
+ }
+ LocksColLockerID = Column{
+ name: "locker_id",
+ table: locksTable,
+ }
+ LocksColUntil = Column{
+ name: "locked_until",
+ table: locksTable,
+ }
+ LocksColProjectionName = Column{
+ name: "projection_name",
+ table: locksTable,
+ }
+)
diff --git a/internal/query/current_sequence_test.go b/internal/query/current_state_test.go
similarity index 51%
rename from internal/query/current_sequence_test.go
rename to internal/query/current_state_test.go
index 20df6aea0a..c76dae710e 100644
--- a/internal/query/current_sequence_test.go
+++ b/internal/query/current_state_test.go
@@ -10,18 +10,26 @@ import (
)
var (
- currentSequenceStmt = `SELECT max(projections.current_sequences.current_sequence) as current_sequence,` +
- ` max(projections.current_sequences.timestamp) as timestamp,` +
- ` projections.current_sequences.projection_name,` +
+ currentSequenceStmt = `SELECT` +
+ ` projections.current_states.last_updated,` +
+ ` projections.current_states.event_date,` +
+ ` projections.current_states.position,` +
+ ` projections.current_states.projection_name,` +
+ ` projections.current_states.aggregate_type,` +
+ ` projections.current_states.aggregate_id,` +
+ ` projections.current_states.sequence,` +
` COUNT(*) OVER ()` +
- ` FROM projections.current_sequences` +
- " AS OF SYSTEM TIME '-1 ms' " +
- ` GROUP BY projections.current_sequences.projection_name`
+ ` FROM projections.current_states` +
+ " AS OF SYSTEM TIME '-1 ms' "
currentSequenceCols = []string{
- "current_sequence",
- "timestamp",
+ "last_updated",
+ "event_date",
+ "position",
"projection_name",
+ "aggregate_type",
+ "aggregate_id",
+ "event_sequence",
"count",
}
)
@@ -39,7 +47,7 @@ func Test_CurrentSequencesPrepares(t *testing.T) {
}{
{
name: "prepareCurrentSequencesQuery no result",
- prepare: prepareCurrentSequencesQuery,
+ prepare: prepareCurrentStateQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(currentSequenceStmt),
@@ -47,79 +55,109 @@ func Test_CurrentSequencesPrepares(t *testing.T) {
nil,
),
},
- object: &CurrentSequences{CurrentSequences: []*CurrentSequence{}},
+ object: &CurrentStates{CurrentStates: []*CurrentState{}},
},
{
name: "prepareCurrentSequencesQuery one result",
- prepare: prepareCurrentSequencesQuery,
+ prepare: prepareCurrentStateQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(currentSequenceStmt),
currentSequenceCols,
[][]driver.Value{
{
- uint64(20211108),
testNow,
+ testNow,
+ float64(20211108),
"projection-name",
+ "agg-type",
+ "agg-id",
+ uint64(20211108),
},
},
),
},
- object: &CurrentSequences{
+ object: &CurrentStates{
SearchResponse: SearchResponse{
Count: 1,
},
- CurrentSequences: []*CurrentSequence{
+ CurrentStates: []*CurrentState{
{
- Timestamp: testNow,
- CurrentSequence: 20211108,
- ProjectionName: "projection-name",
+ ProjectionName: "projection-name",
+ State: State{
+ EventCreatedAt: testNow,
+ LastRun: testNow,
+ Position: 20211108,
+ AggregateID: "agg-id",
+ AggregateType: "agg-type",
+ Sequence: 20211108,
+ },
},
},
},
},
{
name: "prepareCurrentSequencesQuery multiple result",
- prepare: prepareCurrentSequencesQuery,
+ prepare: prepareCurrentStateQuery,
want: want{
sqlExpectations: mockQueries(
regexp.QuoteMeta(currentSequenceStmt),
currentSequenceCols,
[][]driver.Value{
{
- uint64(20211108),
testNow,
+ testNow,
+ float64(20211108),
"projection-name",
+ "agg-type",
+ "agg-id",
+ uint64(20211108),
},
{
- uint64(20211108),
testNow,
- "projection-name-2",
+ testNow,
+ float64(20211108),
+ "projection-name2",
+ "agg-type",
+ "agg-id",
+ uint64(20211108),
},
},
),
},
- object: &CurrentSequences{
+ object: &CurrentStates{
SearchResponse: SearchResponse{
Count: 2,
},
- CurrentSequences: []*CurrentSequence{
+ CurrentStates: []*CurrentState{
{
- Timestamp: testNow,
- CurrentSequence: 20211108,
- ProjectionName: "projection-name",
+ ProjectionName: "projection-name",
+ State: State{
+ EventCreatedAt: testNow,
+ Position: 20211108,
+ LastRun: testNow,
+ AggregateID: "agg-id",
+ AggregateType: "agg-type",
+ Sequence: 20211108,
+ },
},
{
- Timestamp: testNow,
- CurrentSequence: 20211108,
- ProjectionName: "projection-name-2",
+ ProjectionName: "projection-name2",
+ State: State{
+ EventCreatedAt: testNow,
+ Position: 20211108,
+ LastRun: testNow,
+ AggregateID: "agg-id",
+ AggregateType: "agg-type",
+ Sequence: 20211108,
+ },
},
},
},
},
{
name: "prepareCurrentSequencesQuery sql err",
- prepare: prepareCurrentSequencesQuery,
+ prepare: prepareCurrentStateQuery,
want: want{
sqlExpectations: mockQueryErr(
regexp.QuoteMeta(currentSequenceStmt),
@@ -132,7 +170,7 @@ func Test_CurrentSequencesPrepares(t *testing.T) {
return nil, true
},
},
- object: (*CurrentSequences)(nil),
+ object: (*CurrentStates)(nil),
},
}
for _, tt := range tests {
diff --git a/internal/query/custom_text.go b/internal/query/custom_text.go
index 5f83866805..794271f3ec 100644
--- a/internal/query/custom_text.go
+++ b/internal/query/custom_text.go
@@ -112,7 +112,7 @@ func (q *Queries) CustomTextList(ctx context.Context, aggregateID, template, lan
return nil, errors.ThrowInternal(err, "QUERY-2j00f", "Errors.Internal")
}
- texts.LatestSequence, err = q.latestSequence(ctx, projectsTable)
+ texts.State, err = q.latestState(ctx, projectsTable)
return texts, err
}
@@ -142,7 +142,7 @@ func (q *Queries) CustomTextListByTemplate(ctx context.Context, aggregateID, tem
return nil, errors.ThrowInternal(err, "QUERY-3n9ge", "Errors.Internal")
}
- texts.LatestSequence, err = q.latestSequence(ctx, projectsTable)
+ texts.State, err = q.latestState(ctx, projectsTable)
return texts, err
}
diff --git a/internal/query/device_auth.go b/internal/query/device_auth.go
index 91d26ba6c9..c16fcdf58c 100644
--- a/internal/query/device_auth.go
+++ b/internal/query/device_auth.go
@@ -126,7 +126,7 @@ func prepareDeviceAuthQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
return sq.Select(deviceAuthSelectColumns...).From(deviceAuthTable.identifier()).PlaceholderFormat(sq.Dollar),
func(row *sql.Row) (*domain.DeviceAuth, error) {
dst := new(domain.DeviceAuth)
- var scopes database.StringArray
+ var scopes database.TextArray[string]
err := row.Scan(
&dst.AggregateID,
diff --git a/internal/query/device_auth_test.go b/internal/query/device_auth_test.go
index 112032d328..a9f5efcf2d 100644
--- a/internal/query/device_auth_test.go
+++ b/internal/query/device_auth_test.go
@@ -43,7 +43,7 @@ var (
expectedDeviceAuthValues = []driver.Value{
"primary-id",
"client-id",
- database.StringArray{"a", "b", "c"},
+ database.TextArray[string]{"a", "b", "c"},
testNow,
domain.DeviceAuthStateApproved,
"subject",
diff --git a/internal/query/domain_policy.go b/internal/query/domain_policy.go
index 77e821d39b..59e75b9aae 100644
--- a/internal/query/domain_policy.go
+++ b/internal/query/domain_policy.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -91,7 +94,8 @@ func (q *Queries) DomainPolicyByOrg(ctx context.Context, shouldTriggerBulk bool,
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.DomainPolicyProjection.Trigger(ctx)
+ ctx, err = projection.DomainPolicyProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.And{
sq.Eq{DomainPolicyColInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()},
diff --git a/internal/query/event.go b/internal/query/event.go
index b543228825..63ffa3fe4a 100644
--- a/internal/query/event.go
+++ b/internal/query/event.go
@@ -11,7 +11,7 @@ import (
type Event struct {
Editor *EventEditor
- Aggregate eventstore.Aggregate
+ Aggregate *eventstore.Aggregate
Sequence uint64
CreationDate time.Time
Type string
@@ -48,7 +48,7 @@ func filterAuditLogRetention(ctx context.Context, events []eventstore.Event, aud
}
filteredEvents := make([]eventstore.Event, 0, len(events))
for _, event := range events {
- if event.CreationDate().After(callTime.Add(-auditLogRetention)) {
+ if event.CreatedAt().After(callTime.Add(-auditLogRetention)) {
filteredEvents = append(filteredEvents, event)
}
}
@@ -77,23 +77,23 @@ func (q *Queries) convertEvent(ctx context.Context, event eventstore.Event, user
var err error
defer func() { span.EndWithError(err) }()
- editor, ok := users[event.EditorUser()]
+ editor, ok := users[event.Creator()]
if !ok {
- editor = q.editorUserByID(ctx, event.EditorUser())
- users[event.EditorUser()] = editor
+ editor = q.editorUserByID(ctx, event.Creator())
+ users[event.Creator()] = editor
}
return &Event{
Editor: &EventEditor{
- ID: event.EditorUser(),
- Service: event.EditorService(),
+ ID: event.Creator(),
+ Service: "zitadel",
DisplayName: editor.DisplayName,
PreferedLoginName: editor.PreferedLoginName,
AvatarKey: editor.AvatarKey,
},
Aggregate: event.Aggregate(),
Sequence: event.Sequence(),
- CreationDate: event.CreationDate(),
+ CreationDate: event.CreatedAt(),
Type: string(event.Type()),
Payload: event.DataAsBytes(),
}
diff --git a/internal/query/failed_events.go b/internal/query/failed_events.go
index ed335bf621..a1c2b31e41 100644
--- a/internal/query/failed_events.go
+++ b/internal/query/failed_events.go
@@ -15,6 +15,8 @@ import (
const (
failedEventsColumnProjectionName = "projection_name"
failedEventsColumnFailedSequence = "failed_sequence"
+ failedEventsColumnAggregateType = "aggregate_type"
+ failedEventsColumnAggregateID = "aggregate_id"
failedEventsColumnFailureCount = "failure_count"
failedEventsColumnLastFailed = "last_failed"
failedEventsColumnError = "error"
@@ -34,6 +36,14 @@ var (
name: failedEventsColumnFailedSequence,
table: failedEventsTable,
}
+ FailedeventsColumnAggregateType = Column{
+ name: failedEventsColumnAggregateType,
+ table: failedEventsTable,
+ }
+ FailedeventsColumnAggregateID = Column{
+ name: failedEventsColumnAggregateID,
+ table: failedEventsTable,
+ }
FailedEventsColumnFailureCount = Column{
name: failedEventsColumnFailureCount,
table: failedEventsTable,
@@ -59,6 +69,8 @@ type FailedEvents struct {
type FailedEvent struct {
ProjectionName string
+ AggregateType string
+ AggregateID string
FailedSequence uint64
FailureCount uint64
Error string
@@ -131,6 +143,8 @@ func prepareFailedEventsQuery(ctx context.Context, db prepareDatabase) (sq.Selec
return sq.Select(
FailedEventsColumnProjectionName.identifier(),
FailedEventsColumnFailedSequence.identifier(),
+ FailedeventsColumnAggregateType.identifier(),
+ FailedeventsColumnAggregateID.identifier(),
FailedEventsColumnFailureCount.identifier(),
FailedEventsColumnLastFailed.identifier(),
FailedEventsColumnError.identifier(),
@@ -146,6 +160,8 @@ func prepareFailedEventsQuery(ctx context.Context, db prepareDatabase) (sq.Selec
err := rows.Scan(
&failedEvent.ProjectionName,
&failedEvent.FailedSequence,
+ &failedEvent.AggregateType,
+ &failedEvent.AggregateID,
&failedEvent.FailureCount,
&lastFailed,
&failedEvent.Error,
diff --git a/internal/query/failed_events_test.go b/internal/query/failed_events_test.go
index 01ba2bee2f..7e575b5891 100644
--- a/internal/query/failed_events_test.go
+++ b/internal/query/failed_events_test.go
@@ -10,18 +10,23 @@ import (
)
var (
- prepareFailedEventsStmt = `SELECT projections.failed_events.projection_name,` +
- ` projections.failed_events.failed_sequence,` +
- ` projections.failed_events.failure_count,` +
- ` projections.failed_events.last_failed,` +
- ` projections.failed_events.error,` +
+ prepareFailedEventsStmt = `SELECT` +
+ ` projections.failed_events2.projection_name,` +
+ ` projections.failed_events2.failed_sequence,` +
+ ` projections.failed_events2.aggregate_type,` +
+ ` projections.failed_events2.aggregate_id,` +
+ ` projections.failed_events2.failure_count,` +
+ ` projections.failed_events2.last_failed,` +
+ ` projections.failed_events2.error,` +
` COUNT(*) OVER ()` +
- ` FROM projections.failed_events` +
+ ` FROM projections.failed_events2` +
` AS OF SYSTEM TIME '-1 ms'`
prepareFailedEventsCols = []string{
"projection_name",
"failed_sequence",
+ "aggregate_type",
+ "aggregate_id",
"failure_count",
"last_failed",
"error",
@@ -63,6 +68,8 @@ func Test_FailedEventsPrepares(t *testing.T) {
{
"projection-name",
uint64(20211108),
+ "agg-type",
+ "agg-id",
uint64(2),
testNow,
"error",
@@ -81,6 +88,8 @@ func Test_FailedEventsPrepares(t *testing.T) {
FailureCount: 2,
LastFailed: testNow,
Error: "error",
+ AggregateType: "agg-type",
+ AggregateID: "agg-id",
},
},
},
@@ -96,6 +105,8 @@ func Test_FailedEventsPrepares(t *testing.T) {
{
"projection-name",
uint64(20211108),
+ "agg-type",
+ "agg-id",
2,
testNow,
"error",
@@ -103,6 +114,8 @@ func Test_FailedEventsPrepares(t *testing.T) {
{
"projection-name-2",
uint64(20211108),
+ "agg-type",
+ "agg-id",
2,
nil,
"error",
@@ -121,12 +134,16 @@ func Test_FailedEventsPrepares(t *testing.T) {
FailureCount: 2,
LastFailed: testNow,
Error: "error",
+ AggregateType: "agg-type",
+ AggregateID: "agg-id",
},
{
ProjectionName: "projection-name-2",
FailedSequence: 20211108,
FailureCount: 2,
Error: "error",
+ AggregateType: "agg-type",
+ AggregateID: "agg-id",
},
},
},
diff --git a/internal/query/iam_member.go b/internal/query/iam_member.go
index bba45fbf54..9b60181916 100644
--- a/internal/query/iam_member.go
+++ b/internal/query/iam_member.go
@@ -91,7 +91,7 @@ func (q *Queries) IAMMembers(ctx context.Context, queries *IAMMembersQuery, with
return nil, errors.ThrowInvalidArgument(err, "QUERY-USNwM", "Errors.Query.InvalidRequest")
}
- currentSequence, err := q.latestSequence(ctx, instanceMemberTable)
+ currentSequence, err := q.latestState(ctx, instanceMemberTable)
if err != nil {
return nil, err
}
@@ -103,7 +103,7 @@ func (q *Queries) IAMMembers(ctx context.Context, queries *IAMMembersQuery, with
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-Pdg1I", "Errors.Internal")
}
- members.LatestSequence = currentSequence
+ members.State = currentSequence
return members, err
}
diff --git a/internal/query/iam_member_test.go b/internal/query/iam_member_test.go
index ed2bd6cd32..68e1f90f73 100644
--- a/internal/query/iam_member_test.go
+++ b/internal/query/iam_member_test.go
@@ -98,7 +98,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -122,7 +122,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -148,7 +148,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -172,7 +172,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
@@ -198,7 +198,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-1",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -214,7 +214,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-2",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -238,7 +238,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-1",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -253,7 +253,7 @@ func Test_IAMMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-2",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
diff --git a/internal/query/idp.go b/internal/query/idp.go
index e29077b0bb..90783c45db 100644
--- a/internal/query/idp.go
+++ b/internal/query/idp.go
@@ -8,12 +8,15 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -43,7 +46,7 @@ type OIDCIDP struct {
ClientID string
ClientSecret *crypto.CryptoValue
Issuer string
- Scopes database.StringArray
+ Scopes database.TextArray[string]
DisplayNameMapping domain.OIDCMappingField
UsernameMapping domain.OIDCMappingField
AuthorizationEndpoint string
@@ -193,7 +196,8 @@ func (q *Queries) IDPByIDAndResourceOwner(ctx context.Context, shouldTriggerBulk
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.IDPProjection.Trigger(ctx)
+ ctx, err = projection.IDPProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{
@@ -247,7 +251,7 @@ func (q *Queries) IDPs(ctx context.Context, queries *IDPSearchQueries, withOwner
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-xPlVH", "Errors.Internal")
}
- idps.LatestSequence, err = q.latestSequence(ctx, idpTable)
+ idps.State, err = q.latestState(ctx, idpTable)
return idps, err
}
@@ -325,7 +329,7 @@ func prepareIDPByIDQuery(ctx context.Context, db prepareDatabase) (sq.SelectBuil
oidcClientID := sql.NullString{}
oidcClientSecret := new(crypto.CryptoValue)
oidcIssuer := sql.NullString{}
- oidcScopes := database.StringArray{}
+ oidcScopes := database.TextArray[string]{}
oidcDisplayNameMapping := sql.NullInt32{}
oidcUsernameMapping := sql.NullInt32{}
oidcAuthorizationEndpoint := sql.NullString{}
@@ -437,7 +441,7 @@ func prepareIDPsQuery(ctx context.Context, db prepareDatabase) (sq.SelectBuilder
oidcClientID := sql.NullString{}
oidcClientSecret := new(crypto.CryptoValue)
oidcIssuer := sql.NullString{}
- oidcScopes := database.StringArray{}
+ oidcScopes := database.TextArray[string]{}
oidcDisplayNameMapping := sql.NullInt32{}
oidcUsernameMapping := sql.NullInt32{}
oidcAuthorizationEndpoint := sql.NullString{}
diff --git a/internal/query/idp_login_policy_link.go b/internal/query/idp_login_policy_link.go
index 89ee4a08b6..7bc60bf177 100644
--- a/internal/query/idp_login_policy_link.go
+++ b/internal/query/idp_login_policy_link.go
@@ -113,7 +113,7 @@ func (q *Queries) IDPLoginPolicyLinks(ctx context.Context, resourceOwner string,
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-ZkKUc", "Errors.Internal")
}
- idps.LatestSequence, err = q.latestSequence(ctx, idpLoginPolicyLinkTable)
+ idps.State, err = q.latestState(ctx, idpLoginPolicyLinkTable)
return idps, err
}
diff --git a/internal/query/idp_template.go b/internal/query/idp_template.go
index b12824dbb8..e8abb0d7af 100644
--- a/internal/query/idp_template.go
+++ b/internal/query/idp_template.go
@@ -8,12 +8,15 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/repository/idp"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
@@ -59,7 +62,7 @@ type OAuthIDPTemplate struct {
AuthorizationEndpoint string
TokenEndpoint string
UserEndpoint string
- Scopes database.StringArray
+ Scopes database.TextArray[string]
IDAttribute string
}
@@ -68,7 +71,7 @@ type OIDCIDPTemplate struct {
ClientID string
ClientSecret *crypto.CryptoValue
Issuer string
- Scopes database.StringArray
+ Scopes database.TextArray[string]
IsIDTokenMapping bool
}
@@ -84,7 +87,7 @@ type AzureADIDPTemplate struct {
IDPID string
ClientID string
ClientSecret *crypto.CryptoValue
- Scopes database.StringArray
+ Scopes database.TextArray[string]
Tenant string
IsEmailVerified bool
}
@@ -93,7 +96,7 @@ type GitHubIDPTemplate struct {
IDPID string
ClientID string
ClientSecret *crypto.CryptoValue
- Scopes database.StringArray
+ Scopes database.TextArray[string]
}
type GitHubEnterpriseIDPTemplate struct {
@@ -103,14 +106,14 @@ type GitHubEnterpriseIDPTemplate struct {
AuthorizationEndpoint string
TokenEndpoint string
UserEndpoint string
- Scopes database.StringArray
+ Scopes database.TextArray[string]
}
type GitLabIDPTemplate struct {
IDPID string
ClientID string
ClientSecret *crypto.CryptoValue
- Scopes database.StringArray
+ Scopes database.TextArray[string]
}
type GitLabSelfHostedIDPTemplate struct {
@@ -118,14 +121,14 @@ type GitLabSelfHostedIDPTemplate struct {
Issuer string
ClientID string
ClientSecret *crypto.CryptoValue
- Scopes database.StringArray
+ Scopes database.TextArray[string]
}
type GoogleIDPTemplate struct {
IDPID string
ClientID string
ClientSecret *crypto.CryptoValue
- Scopes database.StringArray
+ Scopes database.TextArray[string]
}
type LDAPIDPTemplate struct {
@@ -148,7 +151,7 @@ type AppleIDPTemplate struct {
TeamID string
KeyID string
PrivateKey *crypto.CryptoValue
- Scopes database.StringArray
+ Scopes database.TextArray[string]
}
type SAMLIDPTemplate struct {
@@ -701,7 +704,8 @@ func (q *Queries) IDPTemplateByID(ctx context.Context, shouldTriggerBulk bool, i
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.IDPTemplateProjection.Trigger(ctx)
+ ctx, err = projection.IDPTemplateProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("unable to trigger")
}
eq := sq.Eq{
@@ -751,7 +755,7 @@ func (q *Queries) IDPTemplates(ctx context.Context, queries *IDPTemplateSearchQu
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-BDFrq", "Errors.Internal")
}
- idps.LatestSequence, err = q.latestSequence(ctx, idpTemplateTable)
+ idps.State, err = q.latestState(ctx, idpTemplateTable)
return idps, err
}
@@ -928,14 +932,14 @@ func prepareIDPTemplateByIDQuery(ctx context.Context, db prepareDatabase) (sq.Se
oauthAuthorizationEndpoint := sql.NullString{}
oauthTokenEndpoint := sql.NullString{}
oauthUserEndpoint := sql.NullString{}
- oauthScopes := database.StringArray{}
+ oauthScopes := database.TextArray[string]{}
oauthIDAttribute := sql.NullString{}
oidcID := sql.NullString{}
oidcIssuer := sql.NullString{}
oidcClientID := sql.NullString{}
oidcClientSecret := new(crypto.CryptoValue)
- oidcScopes := database.StringArray{}
+ oidcScopes := database.TextArray[string]{}
oidcIDTokenMapping := sql.NullBool{}
jwtID := sql.NullString{}
@@ -947,14 +951,14 @@ func prepareIDPTemplateByIDQuery(ctx context.Context, db prepareDatabase) (sq.Se
azureadID := sql.NullString{}
azureadClientID := sql.NullString{}
azureadClientSecret := new(crypto.CryptoValue)
- azureadScopes := database.StringArray{}
+ azureadScopes := database.TextArray[string]{}
azureadTenant := sql.NullString{}
azureadIsEmailVerified := sql.NullBool{}
githubID := sql.NullString{}
githubClientID := sql.NullString{}
githubClientSecret := new(crypto.CryptoValue)
- githubScopes := database.StringArray{}
+ githubScopes := database.TextArray[string]{}
githubEnterpriseID := sql.NullString{}
githubEnterpriseClientID := sql.NullString{}
@@ -962,23 +966,23 @@ func prepareIDPTemplateByIDQuery(ctx context.Context, db prepareDatabase) (sq.Se
githubEnterpriseAuthorizationEndpoint := sql.NullString{}
githubEnterpriseTokenEndpoint := sql.NullString{}
githubEnterpriseUserEndpoint := sql.NullString{}
- githubEnterpriseScopes := database.StringArray{}
+ githubEnterpriseScopes := database.TextArray[string]{}
gitlabID := sql.NullString{}
gitlabClientID := sql.NullString{}
gitlabClientSecret := new(crypto.CryptoValue)
- gitlabScopes := database.StringArray{}
+ gitlabScopes := database.TextArray[string]{}
gitlabSelfHostedID := sql.NullString{}
gitlabSelfHostedIssuer := sql.NullString{}
gitlabSelfHostedClientID := sql.NullString{}
gitlabSelfHostedClientSecret := new(crypto.CryptoValue)
- gitlabSelfHostedScopes := database.StringArray{}
+ gitlabSelfHostedScopes := database.TextArray[string]{}
googleID := sql.NullString{}
googleClientID := sql.NullString{}
googleClientSecret := new(crypto.CryptoValue)
- googleScopes := database.StringArray{}
+ googleScopes := database.TextArray[string]{}
samlID := sql.NullString{}
var samlMetadata []byte
@@ -988,14 +992,14 @@ func prepareIDPTemplateByIDQuery(ctx context.Context, db prepareDatabase) (sq.Se
samlWithSignedRequest := sql.NullBool{}
ldapID := sql.NullString{}
- ldapServers := database.StringArray{}
+ ldapServers := database.TextArray[string]{}
ldapStartTls := sql.NullBool{}
ldapBaseDN := sql.NullString{}
ldapBindDN := sql.NullString{}
ldapBindPassword := new(crypto.CryptoValue)
ldapUserBase := sql.NullString{}
- ldapUserObjectClasses := database.StringArray{}
- ldapUserFilters := database.StringArray{}
+ ldapUserObjectClasses := database.TextArray[string]{}
+ ldapUserFilters := database.TextArray[string]{}
ldapTimeout := sql.NullInt64{}
ldapIDAttribute := sql.NullString{}
ldapFirstNameAttribute := sql.NullString{}
@@ -1016,7 +1020,7 @@ func prepareIDPTemplateByIDQuery(ctx context.Context, db prepareDatabase) (sq.Se
appleTeamID := sql.NullString{}
appleKeyID := sql.NullString{}
applePrivateKey := new(crypto.CryptoValue)
- appleScopes := database.StringArray{}
+ appleScopes := database.TextArray[string]{}
err := row.Scan(
&idpTemplate.ID,
@@ -1418,14 +1422,14 @@ func prepareIDPTemplatesQuery(ctx context.Context, db prepareDatabase) (sq.Selec
oauthAuthorizationEndpoint := sql.NullString{}
oauthTokenEndpoint := sql.NullString{}
oauthUserEndpoint := sql.NullString{}
- oauthScopes := database.StringArray{}
+ oauthScopes := database.TextArray[string]{}
oauthIDAttribute := sql.NullString{}
oidcID := sql.NullString{}
oidcIssuer := sql.NullString{}
oidcClientID := sql.NullString{}
oidcClientSecret := new(crypto.CryptoValue)
- oidcScopes := database.StringArray{}
+ oidcScopes := database.TextArray[string]{}
oidcIDTokenMapping := sql.NullBool{}
jwtID := sql.NullString{}
@@ -1437,14 +1441,14 @@ func prepareIDPTemplatesQuery(ctx context.Context, db prepareDatabase) (sq.Selec
azureadID := sql.NullString{}
azureadClientID := sql.NullString{}
azureadClientSecret := new(crypto.CryptoValue)
- azureadScopes := database.StringArray{}
+ azureadScopes := database.TextArray[string]{}
azureadTenant := sql.NullString{}
azureadIsEmailVerified := sql.NullBool{}
githubID := sql.NullString{}
githubClientID := sql.NullString{}
githubClientSecret := new(crypto.CryptoValue)
- githubScopes := database.StringArray{}
+ githubScopes := database.TextArray[string]{}
githubEnterpriseID := sql.NullString{}
githubEnterpriseClientID := sql.NullString{}
@@ -1452,23 +1456,23 @@ func prepareIDPTemplatesQuery(ctx context.Context, db prepareDatabase) (sq.Selec
githubEnterpriseAuthorizationEndpoint := sql.NullString{}
githubEnterpriseTokenEndpoint := sql.NullString{}
githubEnterpriseUserEndpoint := sql.NullString{}
- githubEnterpriseScopes := database.StringArray{}
+ githubEnterpriseScopes := database.TextArray[string]{}
gitlabID := sql.NullString{}
gitlabClientID := sql.NullString{}
gitlabClientSecret := new(crypto.CryptoValue)
- gitlabScopes := database.StringArray{}
+ gitlabScopes := database.TextArray[string]{}
gitlabSelfHostedID := sql.NullString{}
gitlabSelfHostedIssuer := sql.NullString{}
gitlabSelfHostedClientID := sql.NullString{}
gitlabSelfHostedClientSecret := new(crypto.CryptoValue)
- gitlabSelfHostedScopes := database.StringArray{}
+ gitlabSelfHostedScopes := database.TextArray[string]{}
googleID := sql.NullString{}
googleClientID := sql.NullString{}
googleClientSecret := new(crypto.CryptoValue)
- googleScopes := database.StringArray{}
+ googleScopes := database.TextArray[string]{}
samlID := sql.NullString{}
var samlMetadata []byte
@@ -1478,14 +1482,14 @@ func prepareIDPTemplatesQuery(ctx context.Context, db prepareDatabase) (sq.Selec
samlWithSignedRequest := sql.NullBool{}
ldapID := sql.NullString{}
- ldapServers := database.StringArray{}
+ ldapServers := database.TextArray[string]{}
ldapStartTls := sql.NullBool{}
ldapBaseDN := sql.NullString{}
ldapBindDN := sql.NullString{}
ldapBindPassword := new(crypto.CryptoValue)
ldapUserBase := sql.NullString{}
- ldapUserObjectClasses := database.StringArray{}
- ldapUserFilters := database.StringArray{}
+ ldapUserObjectClasses := database.TextArray[string]{}
+ ldapUserFilters := database.TextArray[string]{}
ldapTimeout := sql.NullInt64{}
ldapIDAttribute := sql.NullString{}
ldapFirstNameAttribute := sql.NullString{}
@@ -1506,7 +1510,7 @@ func prepareIDPTemplatesQuery(ctx context.Context, db prepareDatabase) (sq.Selec
appleTeamID := sql.NullString{}
appleKeyID := sql.NullString{}
applePrivateKey := new(crypto.CryptoValue)
- appleScopes := database.StringArray{}
+ appleScopes := database.TextArray[string]{}
err := rows.Scan(
&idpTemplate.ID,
diff --git a/internal/query/idp_template_test.go b/internal/query/idp_template_test.go
index b6eb54aad7..626e411c89 100644
--- a/internal/query/idp_template_test.go
+++ b/internal/query/idp_template_test.go
@@ -545,7 +545,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"authorization",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"id-attribute",
// oidc
nil,
@@ -698,7 +698,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"issuer",
"client_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
true,
// jwt
nil,
@@ -1004,7 +1004,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"idp-id",
"client_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
// github enterprise
nil,
nil,
@@ -1159,7 +1159,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"idp-id",
"client_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
// gitlab self hosted
nil,
nil,
@@ -1307,7 +1307,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"issuer",
"client_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
// google
nil,
nil,
@@ -1455,7 +1455,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"idp-id",
"client_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
// saml
nil,
nil,
@@ -1751,14 +1751,14 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
nil,
// ldap config
"idp-id",
- database.StringArray{"server"},
+ database.TextArray[string]{"server"},
true,
"base",
"dn",
nil,
"user",
- database.StringArray{"object"},
- database.StringArray{"filter"},
+ database.TextArray[string]{"object"},
+ database.TextArray[string]{"filter"},
time.Duration(30000000000),
"id",
"first",
@@ -1941,7 +1941,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"team_id",
"key_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
),
},
@@ -2229,14 +2229,14 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
nil,
// ldap config
"idp-id",
- database.StringArray{"server"},
+ database.TextArray[string]{"server"},
true,
"base",
"dn",
nil,
"user",
- database.StringArray{"object"},
- database.StringArray{"filter"},
+ database.TextArray[string]{"object"},
+ database.TextArray[string]{"filter"},
time.Duration(30000000000),
"id",
"first",
@@ -2545,14 +2545,14 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
nil,
// ldap config
"idp-id-ldap",
- database.StringArray{"server"},
+ database.TextArray[string]{"server"},
true,
"base",
"dn",
nil,
"user",
- database.StringArray{"object"},
- database.StringArray{"filter"},
+ database.TextArray[string]{"object"},
+ database.TextArray[string]{"filter"},
time.Duration(30000000000),
"id",
"first",
@@ -2757,7 +2757,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"idp-id-google",
"client_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
// saml
nil,
nil,
@@ -2818,7 +2818,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"authorization",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"id-attribute",
// oidc
nil,
@@ -2936,7 +2936,7 @@ func Test_IDPTemplateTemplatesPrepares(t *testing.T) {
"issuer",
"client_id",
nil,
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
true,
// jwt
nil,
diff --git a/internal/query/idp_test.go b/internal/query/idp_test.go
index a442523696..5b34fac069 100644
--- a/internal/query/idp_test.go
+++ b/internal/query/idp_test.go
@@ -181,7 +181,7 @@ func Test_IDPPrepares(t *testing.T) {
"oidc-client-id",
nil,
"oidc-issuer",
- database.StringArray{"scope"},
+ database.TextArray[string]{"scope"},
domain.OIDCMappingFieldEmail,
domain.OIDCMappingFieldPreferredLoginName,
"auth.endpoint.ch",
@@ -211,7 +211,7 @@ func Test_IDPPrepares(t *testing.T) {
ClientID: "oidc-client-id",
ClientSecret: &crypto.CryptoValue{},
Issuer: "oidc-issuer",
- Scopes: database.StringArray{"scope"},
+ Scopes: database.TextArray[string]{"scope"},
DisplayNameMapping: domain.OIDCMappingFieldEmail,
UsernameMapping: domain.OIDCMappingFieldPreferredLoginName,
AuthorizationEndpoint: "auth.endpoint.ch",
@@ -385,7 +385,7 @@ func Test_IDPPrepares(t *testing.T) {
"oidc-client-id",
nil,
"oidc-issuer",
- database.StringArray{"scope"},
+ database.TextArray[string]{"scope"},
domain.OIDCMappingFieldEmail,
domain.OIDCMappingFieldPreferredLoginName,
"auth.endpoint.ch",
@@ -421,7 +421,7 @@ func Test_IDPPrepares(t *testing.T) {
ClientID: "oidc-client-id",
ClientSecret: &crypto.CryptoValue{},
Issuer: "oidc-issuer",
- Scopes: database.StringArray{"scope"},
+ Scopes: database.TextArray[string]{"scope"},
DisplayNameMapping: domain.OIDCMappingFieldEmail,
UsernameMapping: domain.OIDCMappingFieldPreferredLoginName,
AuthorizationEndpoint: "auth.endpoint.ch",
@@ -608,7 +608,7 @@ func Test_IDPPrepares(t *testing.T) {
"oidc-client-id",
nil,
"oidc-issuer",
- database.StringArray{"scope"},
+ database.TextArray[string]{"scope"},
domain.OIDCMappingFieldEmail,
domain.OIDCMappingFieldPreferredLoginName,
"auth.endpoint.ch",
@@ -684,7 +684,7 @@ func Test_IDPPrepares(t *testing.T) {
ClientID: "oidc-client-id",
ClientSecret: &crypto.CryptoValue{},
Issuer: "oidc-issuer",
- Scopes: database.StringArray{"scope"},
+ Scopes: database.TextArray[string]{"scope"},
DisplayNameMapping: domain.OIDCMappingFieldEmail,
UsernameMapping: domain.OIDCMappingFieldPreferredLoginName,
AuthorizationEndpoint: "auth.endpoint.ch",
diff --git a/internal/query/idp_user_link.go b/internal/query/idp_user_link.go
index 346ce129e6..60d6066044 100644
--- a/internal/query/idp_user_link.go
+++ b/internal/query/idp_user_link.go
@@ -110,7 +110,7 @@ func (q *Queries) IDPUserLinks(ctx context.Context, queries *IDPUserLinksSearchQ
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-C1E4D", "Errors.Internal")
}
- idps.LatestSequence, err = q.latestSequence(ctx, idpUserLinkTable)
+ idps.State, err = q.latestState(ctx, idpUserLinkTable)
return idps, err
}
diff --git a/internal/query/instance.go b/internal/query/instance.go
index 77327e736f..f570f05912 100644
--- a/internal/query/instance.go
+++ b/internal/query/instance.go
@@ -8,12 +8,14 @@ import (
"time"
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -88,7 +90,7 @@ type Instance struct {
type csp struct {
enabled bool
- allowedOrigins database.StringArray
+ allowedOrigins database.TextArray[string]
}
type Instances struct {
@@ -181,7 +183,8 @@ func (q *Queries) Instance(ctx context.Context, shouldTriggerBulk bool) (instanc
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.InstanceProjection.Trigger(ctx)
+ ctx, err = projection.InstanceProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := prepareInstanceDomainQuery(ctx, q.client, authz.GetInstance(ctx).RequestedDomain())
@@ -535,7 +538,7 @@ func prepareAuthzInstanceQuery(ctx context.Context, db prepareDatabase, host str
instance.csp.enabled = securityPolicyEnabled.Bool
}
if instance.ID == "" {
- return nil, errors.ThrowNotFound(nil, "QUERY-n0wng", "Errors.IAM.NotFound")
+ return nil, errors.ThrowNotFound(nil, "QUERY-1kIjX", "Errors.IAM.NotFound")
}
instance.DefaultLang = language.Make(lang)
if err := rows.Close(); err != nil {
diff --git a/internal/query/instance_domain.go b/internal/query/instance_domain.go
index bb11e1aa82..ee5230f06b 100644
--- a/internal/query/instance_domain.go
+++ b/internal/query/instance_domain.go
@@ -95,7 +95,7 @@ func (q *Queries) queryInstanceDomains(ctx context.Context, stmt string, scan fu
if err != nil {
return nil, err
}
- domains.LatestSequence, err = q.latestSequence(ctx, instanceDomainsTable)
+ domains.State, err = q.latestState(ctx, instanceDomainsTable)
return domains, err
}
diff --git a/internal/query/key.go b/internal/query/key.go
index 29a39fa061..ac00d0624c 100644
--- a/internal/query/key.go
+++ b/internal/query/key.go
@@ -202,7 +202,7 @@ func (q *Queries) ActivePublicKeys(ctx context.Context, t time.Time) (keys *Publ
return nil, errors.ThrowInternal(err, "QUERY-Sghn4", "Errors.Internal")
}
- keys.LatestSequence, err = q.latestSequence(ctx, keyTable)
+ keys.State, err = q.latestState(ctx, keyTable)
if !errors.IsNotFound(err) {
return keys, err
}
@@ -236,7 +236,7 @@ func (q *Queries) ActivePrivateSigningKey(ctx context.Context, t time.Time) (key
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-WRFG4", "Errors.Internal")
}
- keys.LatestSequence, err = q.latestSequence(ctx, keyTable)
+ keys.State, err = q.latestState(ctx, keyTable)
if !errors.IsNotFound(err) {
return keys, err
}
diff --git a/internal/query/lockout_policy.go b/internal/query/lockout_policy.go
index 7e7624dc28..e993162577 100644
--- a/internal/query/lockout_policy.go
+++ b/internal/query/lockout_policy.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -86,7 +89,8 @@ func (q *Queries) LockoutPolicyByOrg(ctx context.Context, shouldTriggerBulk bool
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.LockoutPolicyProjection.Trigger(ctx)
+ ctx, err = projection.LockoutPolicyProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{
LockoutColInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
diff --git a/internal/query/login_policy.go b/internal/query/login_policy.go
index 5d0a7e668f..1968f2f063 100644
--- a/internal/query/login_policy.go
+++ b/internal/query/login_policy.go
@@ -8,11 +8,14 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -27,8 +30,8 @@ type LoginPolicy struct {
AllowExternalIDPs bool
ForceMFA bool
ForceMFALocalOnly bool
- SecondFactors database.EnumArray[domain.SecondFactorType]
- MultiFactors database.EnumArray[domain.MultiFactorType]
+ SecondFactors database.Array[domain.SecondFactorType]
+ MultiFactors database.Array[domain.MultiFactorType]
PasswordlessType domain.PasswordlessType
IsDefault bool
HidePasswordReset bool
@@ -47,12 +50,12 @@ type LoginPolicy struct {
type SecondFactors struct {
SearchResponse
- Factors database.EnumArray[domain.SecondFactorType]
+ Factors database.Array[domain.SecondFactorType]
}
type MultiFactors struct {
SearchResponse
- Factors database.EnumArray[domain.MultiFactorType]
+ Factors database.Array[domain.MultiFactorType]
}
var (
@@ -171,7 +174,8 @@ func (q *Queries) LoginPolicyByID(ctx context.Context, shouldTriggerBulk bool, o
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.LoginPolicyProjection.Trigger(ctx)
+ ctx, err = projection.LoginPolicyProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{LoginPolicyColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
@@ -272,7 +276,7 @@ func (q *Queries) SecondFactorsByOrg(ctx context.Context, orgID string) (factors
if err != nil {
return nil, err
}
- factors.LatestSequence, err = q.latestSequence(ctx, loginPolicyTable)
+ factors.State, err = q.latestState(ctx, loginPolicyTable)
return factors, err
}
@@ -296,7 +300,7 @@ func (q *Queries) DefaultSecondFactors(ctx context.Context) (factors *SecondFact
if err != nil {
return nil, err
}
- factors.LatestSequence, err = q.latestSequence(ctx, loginPolicyTable)
+ factors.State, err = q.latestState(ctx, loginPolicyTable)
return factors, err
}
@@ -332,7 +336,7 @@ func (q *Queries) MultiFactorsByOrg(ctx context.Context, orgID string) (factors
if err != nil {
return nil, err
}
- factors.LatestSequence, err = q.latestSequence(ctx, loginPolicyTable)
+ factors.State, err = q.latestState(ctx, loginPolicyTable)
return factors, err
}
@@ -356,7 +360,7 @@ func (q *Queries) DefaultMultiFactors(ctx context.Context) (factors *MultiFactor
if err != nil {
return nil, err
}
- factors.LatestSequence, err = q.latestSequence(ctx, loginPolicyTable)
+ factors.State, err = q.latestState(ctx, loginPolicyTable)
return factors, err
}
diff --git a/internal/query/login_policy_test.go b/internal/query/login_policy_test.go
index 6da7e34874..f346bd9e3a 100644
--- a/internal/query/login_policy_test.go
+++ b/internal/query/login_policy_test.go
@@ -129,8 +129,8 @@ func Test_LoginPolicyPrepares(t *testing.T) {
true,
true,
true,
- database.EnumArray[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
- database.EnumArray[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
+ database.Array[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
+ database.Array[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
domain.PasswordlessTypeAllowed,
true,
true,
@@ -157,8 +157,8 @@ func Test_LoginPolicyPrepares(t *testing.T) {
AllowExternalIDPs: true,
ForceMFA: true,
ForceMFALocalOnly: true,
- SecondFactors: database.EnumArray[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
- MultiFactors: database.EnumArray[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
+ SecondFactors: database.Array[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
+ MultiFactors: database.Array[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
PasswordlessType: domain.PasswordlessTypeAllowed,
IsDefault: true,
HidePasswordReset: true,
@@ -217,7 +217,7 @@ func Test_LoginPolicyPrepares(t *testing.T) {
regexp.QuoteMeta(prepareLoginPolicy2FAsStmt),
prepareLoginPolicy2FAsCols,
[]driver.Value{
- database.EnumArray[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
+ database.Array[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
},
),
},
@@ -225,7 +225,7 @@ func Test_LoginPolicyPrepares(t *testing.T) {
SearchResponse: SearchResponse{
Count: 1,
},
- Factors: database.EnumArray[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
+ Factors: database.Array[domain.SecondFactorType]{domain.SecondFactorTypeTOTP},
},
},
{
@@ -236,11 +236,11 @@ func Test_LoginPolicyPrepares(t *testing.T) {
regexp.QuoteMeta(prepareLoginPolicy2FAsStmt),
prepareLoginPolicy2FAsCols,
[]driver.Value{
- database.EnumArray[domain.SecondFactorType]{},
+ database.Array[domain.SecondFactorType]{},
},
),
},
- object: &SecondFactors{Factors: database.EnumArray[domain.SecondFactorType]{}},
+ object: &SecondFactors{Factors: database.Array[domain.SecondFactorType]{}},
},
{
name: "prepareLoginPolicy2FAsQuery sql err",
@@ -285,7 +285,7 @@ func Test_LoginPolicyPrepares(t *testing.T) {
regexp.QuoteMeta(prepareLoginPolicyMFAsStmt),
prepareLoginPolicyMFAsCols,
[]driver.Value{
- database.EnumArray[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
+ database.Array[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
},
),
},
@@ -293,7 +293,7 @@ func Test_LoginPolicyPrepares(t *testing.T) {
SearchResponse: SearchResponse{
Count: 1,
},
- Factors: database.EnumArray[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
+ Factors: database.Array[domain.MultiFactorType]{domain.MultiFactorTypeU2FWithPIN},
},
},
{
@@ -304,11 +304,11 @@ func Test_LoginPolicyPrepares(t *testing.T) {
regexp.QuoteMeta(prepareLoginPolicyMFAsStmt),
prepareLoginPolicyMFAsCols,
[]driver.Value{
- database.EnumArray[domain.MultiFactorType]{},
+ database.Array[domain.MultiFactorType]{},
},
),
},
- object: &MultiFactors{Factors: database.EnumArray[domain.MultiFactorType]{}},
+ object: &MultiFactors{Factors: database.Array[domain.MultiFactorType]{}},
},
{
name: "prepareLoginPolicyMFAsQuery sql err",
diff --git a/internal/query/member.go b/internal/query/member.go
index f2f99ff932..c343ea65a5 100644
--- a/internal/query/member.go
+++ b/internal/query/member.go
@@ -5,7 +5,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/query/projection"
sq "github.com/Masterminds/squirrel"
)
@@ -36,10 +35,10 @@ func NewMemberLastNameSearchQuery(method TextComparison, value string) (SearchQu
}
func NewMemberUserIDSearchQuery(value string) (SearchQuery, error) {
- return NewTextQuery(memberUserID, value, TextEquals)
+ return NewTextQuery(membershipUserID, value, TextEquals)
}
func NewMemberResourceOwnerSearchQuery(value string) (SearchQuery, error) {
- return NewTextQuery(memberResourceOwner, value, TextEquals)
+ return NewTextQuery(membershipResourceOwner, value, TextEquals)
}
type Members struct {
@@ -54,7 +53,7 @@ type Member struct {
ResourceOwner string
UserID string
- Roles database.StringArray
+ Roles database.TextArray[string]
PreferredLoginName string
Email string
FirstName string
@@ -63,19 +62,3 @@ type Member struct {
AvatarURL string
UserType domain.UserType
}
-
-var (
- memberTableAlias = table{
- name: "members",
- alias: "members",
- instanceIDCol: projection.MemberInstanceID,
- }
- memberUserID = Column{
- name: projection.MemberUserIDCol,
- table: memberTableAlias,
- }
- memberResourceOwner = Column{
- name: projection.MemberResourceOwner,
- table: memberTableAlias,
- }
-)
diff --git a/internal/query/milestone.go b/internal/query/milestone.go
index e781151d7e..7a91223c95 100644
--- a/internal/query/milestone.go
+++ b/internal/query/milestone.go
@@ -88,7 +88,7 @@ func (q *Queries) SearchMilestones(ctx context.Context, instanceIDs []string, qu
return nil, err
}
- milestones.LatestSequence, err = q.latestSequence(ctx, milestonesTable)
+ milestones.State, err = q.latestState(ctx, milestonesTable)
return milestones, err
}
diff --git a/internal/query/notification_policy.go b/internal/query/notification_policy.go
index c015c1c963..cd637ca592 100644
--- a/internal/query/notification_policy.go
+++ b/internal/query/notification_policy.go
@@ -12,6 +12,7 @@ import (
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -81,7 +82,7 @@ func (q *Queries) NotificationPolicyByOrg(ctx context.Context, shouldTriggerBulk
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx, err = projection.NotificationPolicyProjection.TriggerErr(ctx)
+ ctx, err = projection.NotificationPolicyProjection.Trigger(ctx, handler.WithAwaitRunning())
if err != nil {
return nil, err
}
@@ -116,7 +117,7 @@ func (q *Queries) DefaultNotificationPolicy(ctx context.Context, shouldTriggerBu
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx, err = projection.NotificationPolicyProjection.TriggerErr(ctx)
+ ctx, err = projection.NotificationPolicyProjection.Trigger(ctx, handler.WithAwaitRunning())
if err != nil {
return nil, err
}
diff --git a/internal/query/org.go b/internal/query/org.go
index e99878f63e..bd5a36d2ef 100644
--- a/internal/query/org.go
+++ b/internal/query/org.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
domain_pkg "github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -94,7 +97,8 @@ func (q *Queries) OrgByID(ctx context.Context, shouldTriggerBulk bool, id string
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.OrgProjection.Trigger(ctx)
+ ctx, err = projection.OrgProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := prepareOrgQuery(ctx, q.client)
@@ -231,7 +235,7 @@ func (q *Queries) SearchOrgs(ctx context.Context, queries *OrgSearchQueries) (or
return nil, errors.ThrowInternal(err, "QUERY-M6mYN", "Errors.Internal")
}
- orgs.LatestSequence, err = q.latestSequence(ctx, orgsTable)
+ orgs.State, err = q.latestState(ctx, orgsTable)
return orgs, err
}
diff --git a/internal/query/org_domain.go b/internal/query/org_domain.go
index ee89efba96..d03f0291d8 100644
--- a/internal/query/org_domain.go
+++ b/internal/query/org_domain.go
@@ -78,7 +78,7 @@ func (q *Queries) SearchOrgDomains(ctx context.Context, queries *OrgDomainSearch
return nil, errors.ThrowInternal(err, "QUERY-M6mYN", "Errors.Internal")
}
- domains.LatestSequence, err = q.latestSequence(ctx, orgDomainsTable)
+ domains.State, err = q.latestState(ctx, orgDomainsTable)
return domains, err
}
diff --git a/internal/query/org_member.go b/internal/query/org_member.go
index 3b5eb4a41a..6b31eb27d0 100644
--- a/internal/query/org_member.go
+++ b/internal/query/org_member.go
@@ -93,7 +93,7 @@ func (q *Queries) OrgMembers(ctx context.Context, queries *OrgMembersQuery, with
return nil, errors.ThrowInvalidArgument(err, "QUERY-PDAVB", "Errors.Query.InvalidRequest")
}
- currentSequence, err := q.latestSequence(ctx, orgsTable)
+ currentSequence, err := q.latestState(ctx, orgsTable)
if err != nil {
return nil, err
}
@@ -106,7 +106,7 @@ func (q *Queries) OrgMembers(ctx context.Context, queries *OrgMembersQuery, with
return nil, errors.ThrowInternal(err, "QUERY-5g4yV", "Errors.Internal")
}
- members.LatestSequence = currentSequence
+ members.State = currentSequence
return members, err
}
diff --git a/internal/query/org_member_test.go b/internal/query/org_member_test.go
index 57e9f84b6a..ee599b0e57 100644
--- a/internal/query/org_member_test.go
+++ b/internal/query/org_member_test.go
@@ -102,7 +102,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -126,7 +126,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -152,7 +152,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -176,7 +176,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
@@ -202,7 +202,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-1",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -218,7 +218,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-2",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -242,7 +242,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-1",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -257,7 +257,7 @@ func Test_OrgMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-2",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
diff --git a/internal/query/org_metadata.go b/internal/query/org_metadata.go
index 517d2d634d..2d0311a90f 100644
--- a/internal/query/org_metadata.go
+++ b/internal/query/org_metadata.go
@@ -8,9 +8,12 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -82,7 +85,8 @@ func (q *Queries) GetOrgMetadataByKey(ctx context.Context, shouldTriggerBulk boo
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.OrgMetadataProjection.Trigger(ctx)
+ ctx, err = projection.OrgMetadataProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
query, scan := prepareOrgMetadataQuery(ctx, q.client)
@@ -114,7 +118,8 @@ func (q *Queries) SearchOrgMetadata(ctx context.Context, shouldTriggerBulk bool,
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.OrgMetadataProjection.Trigger(ctx)
+ ctx, err = projection.OrgMetadataProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{
OrgMetadataOrgIDCol.identifier(): orgID,
@@ -137,7 +142,7 @@ func (q *Queries) SearchOrgMetadata(ctx context.Context, shouldTriggerBulk bool,
return nil, errors.ThrowInternal(err, "QUERY-Ho2wf", "Errors.Internal")
}
- metadata.LatestSequence, err = q.latestSequence(ctx, orgMetadataTable)
+ metadata.State, err = q.latestState(ctx, orgMetadataTable)
return metadata, err
}
diff --git a/internal/query/password_age_policy.go b/internal/query/password_age_policy.go
index e2130f7767..16104967c7 100644
--- a/internal/query/password_age_policy.go
+++ b/internal/query/password_age_policy.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -86,7 +89,8 @@ func (q *Queries) PasswordAgePolicyByOrg(ctx context.Context, shouldTriggerBulk
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.PasswordAgeProjection.Trigger(ctx)
+ ctx, err = projection.PasswordAgeProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{PasswordAgeColInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
@@ -119,7 +123,8 @@ func (q *Queries) DefaultPasswordAgePolicy(ctx context.Context, shouldTriggerBul
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.PasswordAgeProjection.Trigger(ctx)
+ ctx, err = projection.PasswordAgeProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := preparePasswordAgePolicyQuery(ctx, q.client)
diff --git a/internal/query/password_complexity_policy.go b/internal/query/password_complexity_policy.go
index a61048b990..4e1942038d 100644
--- a/internal/query/password_complexity_policy.go
+++ b/internal/query/password_complexity_policy.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -38,7 +41,8 @@ func (q *Queries) PasswordComplexityPolicyByOrg(ctx context.Context, shouldTrigg
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.PasswordComplexityProjection.Trigger(ctx)
+ ctx, err = projection.PasswordComplexityProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{PasswordComplexityColInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
@@ -71,7 +75,8 @@ func (q *Queries) DefaultPasswordComplexityPolicy(ctx context.Context, shouldTri
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.PasswordComplexityProjection.Trigger(ctx)
+ ctx, err = projection.PasswordComplexityProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := preparePasswordComplexityPolicyQuery(ctx, q.client)
diff --git a/internal/query/privacy_policy.go b/internal/query/privacy_policy.go
index 8ff9f0edbf..f37884ca17 100644
--- a/internal/query/privacy_policy.go
+++ b/internal/query/privacy_policy.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -96,7 +99,8 @@ func (q *Queries) PrivacyPolicyByOrg(ctx context.Context, shouldTriggerBulk bool
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.PrivacyPolicyProjection.Trigger(ctx)
+ ctx, err = projection.PrivacyPolicyProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{PrivacyColInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
if !withOwnerRemoved {
@@ -128,7 +132,8 @@ func (q *Queries) DefaultPrivacyPolicy(ctx context.Context, shouldTriggerBulk bo
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.PrivacyPolicyProjection.Trigger(ctx)
+ ctx, err = projection.PrivacyPolicyProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := preparePrivacyPolicyQuery(ctx, q.client)
diff --git a/internal/query/project.go b/internal/query/project.go
index 0e628d7b1d..9c63016844 100644
--- a/internal/query/project.go
+++ b/internal/query/project.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -105,7 +108,8 @@ func (q *Queries) ProjectByID(ctx context.Context, shouldTriggerBulk bool, id st
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.ProjectProjection.Trigger(ctx)
+ ctx, err = projection.ProjectProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := prepareProjectQuery(ctx, q.client)
@@ -149,7 +153,7 @@ func (q *Queries) SearchProjects(ctx context.Context, queries *ProjectSearchQuer
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-2j00f", "Errors.Internal")
}
- projects.LatestSequence, err = q.latestSequence(ctx, projectsTable)
+ projects.State, err = q.latestState(ctx, projectsTable)
return projects, err
}
diff --git a/internal/query/project_grant.go b/internal/query/project_grant.go
index d7ee5ce1a1..229d3b320e 100644
--- a/internal/query/project_grant.go
+++ b/internal/query/project_grant.go
@@ -8,11 +8,14 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -102,7 +105,7 @@ type ProjectGrant struct {
ProjectName string
GrantedOrgID string
OrgName string
- GrantedRoleKeys database.StringArray
+ GrantedRoleKeys database.TextArray[string]
ResourceOwnerName string
}
@@ -116,7 +119,8 @@ func (q *Queries) ProjectGrantByID(ctx context.Context, shouldTriggerBulk bool,
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.ProjectGrantProjection.Trigger(ctx)
+ ctx, err = projection.ProjectGrantProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
stmt, scan := prepareProjectGrantQuery(ctx, q.client)
@@ -191,7 +195,7 @@ func (q *Queries) SearchProjectGrants(ctx context.Context, queries *ProjectGrant
return nil, errors.ThrowInternal(err, "QUERY-PP02n", "Errors.Internal")
}
- grants.LatestSequence, err = q.latestSequence(ctx, projectGrantsTable)
+ grants.State, err = q.latestState(ctx, projectGrantsTable)
return grants, err
}
diff --git a/internal/query/project_grant_member.go b/internal/query/project_grant_member.go
index 11de7cd0ea..a6ee8dc29d 100644
--- a/internal/query/project_grant_member.go
+++ b/internal/query/project_grant_member.go
@@ -107,7 +107,7 @@ func (q *Queries) ProjectGrantMembers(ctx context.Context, queries *ProjectGrant
return nil, errors.ThrowInvalidArgument(err, "QUERY-USNwM", "Errors.Query.InvalidRequest")
}
- currentSequence, err := q.latestSequence(ctx, projectGrantMemberTable)
+ currentSequence, err := q.latestState(ctx, projectGrantMemberTable)
if err != nil {
return nil, err
}
@@ -120,7 +120,7 @@ func (q *Queries) ProjectGrantMembers(ctx context.Context, queries *ProjectGrant
return nil, errors.ThrowInternal(err, "QUERY-Pdg1I", "Errors.Internal")
}
- members.LatestSequence = currentSequence
+ members.State = currentSequence
return members, err
}
diff --git a/internal/query/project_grant_member_test.go b/internal/query/project_grant_member_test.go
index 99e7c5320e..adb1c506e5 100644
--- a/internal/query/project_grant_member_test.go
+++ b/internal/query/project_grant_member_test.go
@@ -105,7 +105,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -129,7 +129,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -155,7 +155,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -179,7 +179,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
@@ -205,7 +205,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-1",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -221,7 +221,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-2",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -245,7 +245,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-1",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -260,7 +260,7 @@ func Test_ProjectGrantMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-2",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
diff --git a/internal/query/project_grant_test.go b/internal/query/project_grant_test.go
index fbb3432b6a..e67d2ad17d 100644
--- a/internal/query/project_grant_test.go
+++ b/internal/query/project_grant_test.go
@@ -122,7 +122,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
},
@@ -144,7 +144,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
},
@@ -169,7 +169,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
nil,
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
},
@@ -191,7 +191,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
},
@@ -216,7 +216,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
nil,
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
},
@@ -238,7 +238,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
},
@@ -263,7 +263,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
nil,
},
},
@@ -285,7 +285,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "",
},
},
@@ -310,7 +310,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
{
@@ -324,7 +324,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
},
@@ -346,7 +346,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
{
@@ -360,7 +360,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
},
@@ -419,7 +419,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
),
@@ -435,7 +435,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
},
@@ -457,7 +457,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
nil,
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
),
@@ -473,7 +473,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
},
@@ -495,7 +495,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
"project-name",
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
nil,
},
),
@@ -511,7 +511,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "project-name",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "",
},
},
@@ -533,7 +533,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
nil,
"org-id",
"org-name",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
"ro-name",
},
),
@@ -549,7 +549,7 @@ func Test_ProjectGrantPrepares(t *testing.T) {
ProjectName: "",
GrantedOrgID: "org-id",
OrgName: "org-name",
- GrantedRoleKeys: database.StringArray{"role-key"},
+ GrantedRoleKeys: database.TextArray[string]{"role-key"},
ResourceOwnerName: "ro-name",
},
},
diff --git a/internal/query/project_member.go b/internal/query/project_member.go
index 3cdb300869..47c937be59 100644
--- a/internal/query/project_member.go
+++ b/internal/query/project_member.go
@@ -93,7 +93,7 @@ func (q *Queries) ProjectMembers(ctx context.Context, queries *ProjectMembersQue
return nil, errors.ThrowInvalidArgument(err, "QUERY-T8CuT", "Errors.Query.InvalidRequest")
}
- currentSequence, err := q.latestSequence(ctx, projectMemberTable)
+ currentSequence, err := q.latestState(ctx, projectMemberTable)
if err != nil {
return nil, err
}
@@ -106,7 +106,7 @@ func (q *Queries) ProjectMembers(ctx context.Context, queries *ProjectMembersQue
return nil, errors.ThrowInternal(err, "QUERY-uh6pj", "Errors.Internal")
}
- members.LatestSequence = currentSequence
+ members.State = currentSequence
return members, err
}
diff --git a/internal/query/project_member_test.go b/internal/query/project_member_test.go
index f917718897..f102cff63f 100644
--- a/internal/query/project_member_test.go
+++ b/internal/query/project_member_test.go
@@ -102,7 +102,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -126,7 +126,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -152,7 +152,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -176,7 +176,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
@@ -202,7 +202,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-1",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"gigi@caos-ag.zitadel.ch",
"gigi@caos.ch",
"first-name",
@@ -218,7 +218,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
uint64(20211206),
"ro",
"user-id-2",
- database.StringArray{"role-1", "role-2"},
+ database.TextArray[string]{"role-1", "role-2"},
"machine@caos-ag.zitadel.ch",
nil,
nil,
@@ -242,7 +242,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-1",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "gigi@caos-ag.zitadel.ch",
Email: "gigi@caos.ch",
FirstName: "first-name",
@@ -257,7 +257,7 @@ func Test_ProjectMemberPrepares(t *testing.T) {
Sequence: 20211206,
ResourceOwner: "ro",
UserID: "user-id-2",
- Roles: database.StringArray{"role-1", "role-2"},
+ Roles: database.TextArray[string]{"role-1", "role-2"},
PreferredLoginName: "machine@caos-ag.zitadel.ch",
Email: "",
FirstName: "",
diff --git a/internal/query/project_role.go b/internal/query/project_role.go
index fbe8027149..c141ed9183 100644
--- a/internal/query/project_role.go
+++ b/internal/query/project_role.go
@@ -7,9 +7,12 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -88,7 +91,8 @@ func (q *Queries) SearchProjectRoles(ctx context.Context, shouldTriggerBulk bool
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.ProjectRoleProjection.Trigger(ctx)
+ ctx, err = projection.ProjectRoleProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
eq := sq.Eq{ProjectRoleColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
@@ -109,7 +113,7 @@ func (q *Queries) SearchProjectRoles(ctx context.Context, shouldTriggerBulk bool
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-5Ngd9", "Errors.Internal")
}
- roles.LatestSequence, err = q.latestSequence(ctx, projectRolesTable)
+ roles.State, err = q.latestState(ctx, projectRolesTable)
return roles, err
}
@@ -145,7 +149,7 @@ func (q *Queries) SearchGrantedProjectRoles(ctx context.Context, grantID, grante
return nil, errors.ThrowInternal(err, "QUERY-5Ngd9", "Errors.Internal")
}
- roles.LatestSequence, err = q.latestSequence(ctx, projectRolesTable)
+ roles.State, err = q.latestState(ctx, projectRolesTable)
return roles, err
}
diff --git a/internal/query/projection/action.go b/internal/query/projection/action.go
index 780aee2d90..0bdfccce05 100644
--- a/internal/query/projection/action.go
+++ b/internal/query/projection/action.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/action"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -29,43 +29,44 @@ const (
ActionOwnerRemovedCol = "owner_removed"
)
-type actionProjection struct {
- crdb.StatementHandler
+type actionProjection struct{}
+
+func newActionProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(actionProjection))
}
-func newActionProjection(ctx context.Context, config crdb.StatementHandlerConfig) *actionProjection {
- p := new(actionProjection)
- config.ProjectionName = ActionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(ActionIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(ActionCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ActionChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ActionResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(ActionInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(ActionStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(ActionSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(ActionNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(ActionScriptCol, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(ActionTimeoutCol, crdb.ColumnTypeInt64, crdb.Default(0)),
- crdb.NewColumn(ActionAllowedToFailCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(ActionOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*actionProjection) Name() string {
+ return ActionTable
+}
+
+func (*actionProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(ActionIDCol, handler.ColumnTypeText),
+ handler.NewColumn(ActionCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ActionChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ActionResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(ActionInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(ActionStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(ActionSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(ActionNameCol, handler.ColumnTypeText),
+ handler.NewColumn(ActionScriptCol, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(ActionTimeoutCol, handler.ColumnTypeInt64, handler.Default(0)),
+ handler.NewColumn(ActionAllowedToFailCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(ActionOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(ActionInstanceIDCol, ActionIDCol),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{ActionResourceOwnerCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{ActionOwnerRemovedCol})),
+ handler.NewPrimaryKey(ActionInstanceIDCol, ActionIDCol),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{ActionResourceOwnerCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{ActionOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *actionProjection) reducers() []handler.AggregateReducer {
+func (p *actionProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: action.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: action.AddedEventType,
Reduce: p.reduceActionAdded,
@@ -90,7 +91,7 @@ func (p *actionProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -99,7 +100,7 @@ func (p *actionProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(ActionInstanceIDCol),
@@ -114,7 +115,7 @@ func (p *actionProjection) reduceActionAdded(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Dff21", "reduce.wrong.event.type% s", action.AddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(ActionIDCol, e.Aggregate().ID),
@@ -153,7 +154,7 @@ func (p *actionProjection) reduceActionChanged(event eventstore.Event) (*handler
if e.AllowedToFail != nil {
values = append(values, handler.NewCol(ActionAllowedToFailCol, *e.AllowedToFail))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
values,
[]handler.Condition{
@@ -168,7 +169,7 @@ func (p *actionProjection) reduceActionDeactivated(event eventstore.Event) (*han
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Fgh32", "reduce.wrong.event.type %s", action.DeactivatedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ActionChangeDateCol, e.CreationDate()),
@@ -187,7 +188,7 @@ func (p *actionProjection) reduceActionReactivated(event eventstore.Event) (*han
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-hwdqa", "reduce.wrong.event.type %s", action.ReactivatedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ActionChangeDateCol, e.CreationDate()),
@@ -206,7 +207,7 @@ func (p *actionProjection) reduceActionRemoved(event eventstore.Event) (*handler
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Dgh2d", "reduce.wrong.event.type %s", action.RemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ActionIDCol, e.Aggregate().ID),
@@ -220,7 +221,7 @@ func (p *actionProjection) reduceOwnerRemoved(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-mSmWM", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ActionInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/action_test.go b/internal/query/projection/action_test.go
index 2c235281ea..71dacb9d8e 100644
--- a/internal/query/projection/action_test.go
+++ b/internal/query/projection/action_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/action"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -27,17 +26,19 @@ func TestActionProjection_reduces(t *testing.T) {
{
name: "reduceActionAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(action.AddedEventType),
- action.AggregateType,
- []byte(`{"name": "name", "script":"name(){}","timeout": 3000000000, "allowedToFail": true}`),
- ), action.AddedEventMapper),
+ event: getEvent(
+ testEvent(
+ action.AddedEventType,
+ action.AggregateType,
+ []byte(`{"name": "name", "script":"name(){}","timeout": 3000000000, "allowedToFail": true}`),
+ ),
+ action.AddedEventMapper,
+ ),
},
reduce: (&actionProjection{}).reduceActionAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("action"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("action"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -63,17 +64,19 @@ func TestActionProjection_reduces(t *testing.T) {
{
name: "reduceActionChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(action.ChangedEventType),
- action.AggregateType,
- []byte(`{"name": "name2", "script":"name2(){}"}`),
- ), action.ChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ action.ChangedEventType,
+ action.AggregateType,
+ []byte(`{"name": "name2", "script":"name2(){}"}`),
+ ),
+ action.ChangedEventMapper,
+ ),
},
reduce: (&actionProjection{}).reduceActionChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("action"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("action"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -94,17 +97,19 @@ func TestActionProjection_reduces(t *testing.T) {
{
name: "reduceActionDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(action.ChangedEventType),
- action.AggregateType,
- []byte(`{}`),
- ), action.DeactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ action.ChangedEventType,
+ action.AggregateType,
+ []byte(`{}`),
+ ),
+ action.DeactivatedEventMapper,
+ ),
},
reduce: (&actionProjection{}).reduceActionDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("action"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("action"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -124,17 +129,19 @@ func TestActionProjection_reduces(t *testing.T) {
{
name: "reduceActionReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(action.ChangedEventType),
- action.AggregateType,
- []byte(`{}`),
- ), action.ReactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ action.ChangedEventType,
+ action.AggregateType,
+ []byte(`{}`),
+ ),
+ action.ReactivatedEventMapper,
+ ),
},
reduce: (&actionProjection{}).reduceActionReactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("action"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("action"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -154,17 +161,19 @@ func TestActionProjection_reduces(t *testing.T) {
{
name: "reduceActionRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(action.ChangedEventType),
- action.AggregateType,
- []byte(`{}`),
- ), action.RemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ action.ChangedEventType,
+ action.AggregateType,
+ []byte(`{}`),
+ ),
+ action.RemovedEventMapper,
+ ),
},
reduce: (&actionProjection{}).reduceActionRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("action"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("action"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -181,17 +190,19 @@ func TestActionProjection_reduces(t *testing.T) {
{
name: "reduceOwnerRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ),
+ org.OrgRemovedEventMapper,
+ ),
},
reduce: (&actionProjection{}).reduceOwnerRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -208,17 +219,19 @@ func TestActionProjection_reduces(t *testing.T) {
{
name: "reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ),
+ instance.InstanceRemovedEventMapper,
+ ),
},
reduce: reduceInstanceRemovedHelper(ActionInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/app.go b/internal/query/projection/app.go
index 8ac53c10ba..3ed632c239 100644
--- a/internal/query/projection/app.go
+++ b/internal/query/projection/app.go
@@ -7,8 +7,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -67,91 +67,92 @@ const (
AppSAMLConfigColumnMetadataURL = "metadata_url"
)
-type appProjection struct {
- crdb.StatementHandler
+type appProjection struct{}
+
+func newAppProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(appProjection))
}
-func newAppProjection(ctx context.Context, config crdb.StatementHandlerConfig) *appProjection {
- p := new(appProjection)
- config.ProjectionName = AppProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(AppColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(AppColumnName, crdb.ColumnTypeText),
- crdb.NewColumn(AppColumnProjectID, crdb.ColumnTypeText),
- crdb.NewColumn(AppColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AppColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AppColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(AppColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(AppColumnState, crdb.ColumnTypeEnum),
- crdb.NewColumn(AppColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(AppColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*appProjection) Name() string {
+ return AppProjectionTable
+}
+
+func (*appProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(AppColumnID, handler.ColumnTypeText),
+ handler.NewColumn(AppColumnName, handler.ColumnTypeText),
+ handler.NewColumn(AppColumnProjectID, handler.ColumnTypeText),
+ handler.NewColumn(AppColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AppColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AppColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(AppColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(AppColumnState, handler.ColumnTypeEnum),
+ handler.NewColumn(AppColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(AppColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(AppColumnInstanceID, AppColumnID),
- crdb.WithIndex(crdb.NewIndex("project_id", []string{AppColumnProjectID})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{AppColumnOwnerRemoved})),
+ handler.NewPrimaryKey(AppColumnInstanceID, AppColumnID),
+ handler.WithIndex(handler.NewIndex("project_id", []string{AppColumnProjectID})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{AppColumnOwnerRemoved})),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(AppAPIConfigColumnAppID, crdb.ColumnTypeText),
- crdb.NewColumn(AppAPIConfigColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(AppAPIConfigColumnClientID, crdb.ColumnTypeText),
- crdb.NewColumn(AppAPIConfigColumnClientSecret, crdb.ColumnTypeJSONB, crdb.Nullable()),
- crdb.NewColumn(AppAPIConfigColumnAuthMethod, crdb.ColumnTypeEnum),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(AppAPIConfigColumnAppID, handler.ColumnTypeText),
+ handler.NewColumn(AppAPIConfigColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(AppAPIConfigColumnClientID, handler.ColumnTypeText),
+ handler.NewColumn(AppAPIConfigColumnClientSecret, handler.ColumnTypeJSONB, handler.Nullable()),
+ handler.NewColumn(AppAPIConfigColumnAuthMethod, handler.ColumnTypeEnum),
},
- crdb.NewPrimaryKey(AppAPIConfigColumnInstanceID, AppAPIConfigColumnAppID),
+ handler.NewPrimaryKey(AppAPIConfigColumnInstanceID, AppAPIConfigColumnAppID),
appAPITableSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- crdb.WithIndex(crdb.NewIndex("client_id", []string{AppAPIConfigColumnClientID})),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ handler.WithIndex(handler.NewIndex("client_id", []string{AppAPIConfigColumnClientID})),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(AppOIDCConfigColumnAppID, crdb.ColumnTypeText),
- crdb.NewColumn(AppOIDCConfigColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(AppOIDCConfigColumnVersion, crdb.ColumnTypeEnum),
- crdb.NewColumn(AppOIDCConfigColumnClientID, crdb.ColumnTypeText),
- crdb.NewColumn(AppOIDCConfigColumnClientSecret, crdb.ColumnTypeJSONB, crdb.Nullable()),
- crdb.NewColumn(AppOIDCConfigColumnRedirectUris, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(AppOIDCConfigColumnResponseTypes, crdb.ColumnTypeEnumArray, crdb.Nullable()),
- crdb.NewColumn(AppOIDCConfigColumnGrantTypes, crdb.ColumnTypeEnumArray, crdb.Nullable()),
- crdb.NewColumn(AppOIDCConfigColumnApplicationType, crdb.ColumnTypeEnum),
- crdb.NewColumn(AppOIDCConfigColumnAuthMethodType, crdb.ColumnTypeEnum),
- crdb.NewColumn(AppOIDCConfigColumnPostLogoutRedirectUris, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(AppOIDCConfigColumnDevMode, crdb.ColumnTypeBool),
- crdb.NewColumn(AppOIDCConfigColumnAccessTokenType, crdb.ColumnTypeEnum),
- crdb.NewColumn(AppOIDCConfigColumnAccessTokenRoleAssertion, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(AppOIDCConfigColumnIDTokenRoleAssertion, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(AppOIDCConfigColumnIDTokenUserinfoAssertion, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(AppOIDCConfigColumnClockSkew, crdb.ColumnTypeInt64, crdb.Default(0)),
- crdb.NewColumn(AppOIDCConfigColumnAdditionalOrigins, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(AppOIDCConfigColumnSkipNativeAppSuccessPage, crdb.ColumnTypeBool, crdb.Default(false)),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(AppOIDCConfigColumnAppID, handler.ColumnTypeText),
+ handler.NewColumn(AppOIDCConfigColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(AppOIDCConfigColumnVersion, handler.ColumnTypeEnum),
+ handler.NewColumn(AppOIDCConfigColumnClientID, handler.ColumnTypeText),
+ handler.NewColumn(AppOIDCConfigColumnClientSecret, handler.ColumnTypeJSONB, handler.Nullable()),
+ handler.NewColumn(AppOIDCConfigColumnRedirectUris, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(AppOIDCConfigColumnResponseTypes, handler.ColumnTypeEnumArray, handler.Nullable()),
+ handler.NewColumn(AppOIDCConfigColumnGrantTypes, handler.ColumnTypeEnumArray, handler.Nullable()),
+ handler.NewColumn(AppOIDCConfigColumnApplicationType, handler.ColumnTypeEnum),
+ handler.NewColumn(AppOIDCConfigColumnAuthMethodType, handler.ColumnTypeEnum),
+ handler.NewColumn(AppOIDCConfigColumnPostLogoutRedirectUris, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(AppOIDCConfigColumnDevMode, handler.ColumnTypeBool),
+ handler.NewColumn(AppOIDCConfigColumnAccessTokenType, handler.ColumnTypeEnum),
+ handler.NewColumn(AppOIDCConfigColumnAccessTokenRoleAssertion, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(AppOIDCConfigColumnIDTokenRoleAssertion, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(AppOIDCConfigColumnIDTokenUserinfoAssertion, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(AppOIDCConfigColumnClockSkew, handler.ColumnTypeInt64, handler.Default(0)),
+ handler.NewColumn(AppOIDCConfigColumnAdditionalOrigins, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(AppOIDCConfigColumnSkipNativeAppSuccessPage, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(AppOIDCConfigColumnInstanceID, AppOIDCConfigColumnAppID),
+ handler.NewPrimaryKey(AppOIDCConfigColumnInstanceID, AppOIDCConfigColumnAppID),
appOIDCTableSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- crdb.WithIndex(crdb.NewIndex("client_id", []string{AppOIDCConfigColumnClientID})),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ handler.WithIndex(handler.NewIndex("client_id", []string{AppOIDCConfigColumnClientID})),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(AppSAMLConfigColumnAppID, crdb.ColumnTypeText),
- crdb.NewColumn(AppSAMLConfigColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(AppSAMLConfigColumnEntityID, crdb.ColumnTypeText),
- crdb.NewColumn(AppSAMLConfigColumnMetadata, crdb.ColumnTypeBytes),
- crdb.NewColumn(AppSAMLConfigColumnMetadataURL, crdb.ColumnTypeText),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(AppSAMLConfigColumnAppID, handler.ColumnTypeText),
+ handler.NewColumn(AppSAMLConfigColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(AppSAMLConfigColumnEntityID, handler.ColumnTypeText),
+ handler.NewColumn(AppSAMLConfigColumnMetadata, handler.ColumnTypeBytes),
+ handler.NewColumn(AppSAMLConfigColumnMetadataURL, handler.ColumnTypeText),
},
- crdb.NewPrimaryKey(AppSAMLConfigColumnInstanceID, AppSAMLConfigColumnAppID),
+ handler.NewPrimaryKey(AppSAMLConfigColumnInstanceID, AppSAMLConfigColumnAppID),
appSAMLTableSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- crdb.WithIndex(crdb.NewIndex("entity_id", []string{AppSAMLConfigColumnEntityID})),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ handler.WithIndex(handler.NewIndex("entity_id", []string{AppSAMLConfigColumnEntityID})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *appProjection) reducers() []handler.AggregateReducer {
+func (p *appProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.ApplicationAddedType,
Reduce: p.reduceAppAdded,
@@ -212,7 +213,7 @@ func (p *appProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -221,7 +222,7 @@ func (p *appProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(AppColumnInstanceID),
@@ -236,7 +237,7 @@ func (p *appProjection) reduceAppAdded(event eventstore.Event) (*handler.Stateme
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-1xYE6", "reduce.wrong.event.type %s", project.ApplicationAddedType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(AppColumnID, e.AppID),
@@ -258,9 +259,9 @@ func (p *appProjection) reduceAppChanged(event eventstore.Event) (*handler.State
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ZJ8JA", "reduce.wrong.event.type %s", project.ApplicationChangedType)
}
if e.Name == "" {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(AppColumnName, e.Name),
@@ -279,7 +280,7 @@ func (p *appProjection) reduceAppDeactivated(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-MVWxZ", "reduce.wrong.event.type %s", project.ApplicationDeactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(AppColumnState, domain.AppStateInactive),
@@ -298,7 +299,7 @@ func (p *appProjection) reduceAppReactivated(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-D0HZO", "reduce.wrong.event.type %s", project.ApplicationReactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(AppColumnState, domain.AppStateActive),
@@ -317,7 +318,7 @@ func (p *appProjection) reduceAppRemoved(event eventstore.Event) (*handler.State
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Y99aq", "reduce.wrong.event.type %s", project.ApplicationRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(AppColumnID, e.AppID),
@@ -331,7 +332,7 @@ func (p *appProjection) reduceProjectRemoved(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-DlUlO", "reduce.wrong.event.type %s", project.ProjectRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(AppColumnProjectID, e.Aggregate().ID),
@@ -345,9 +346,9 @@ func (p *appProjection) reduceAPIConfigAdded(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Y99aq", "reduce.wrong.event.type %s", project.APIConfigAddedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(AppAPIConfigColumnAppID, e.AppID),
handler.NewCol(AppAPIConfigColumnInstanceID, e.Aggregate().InstanceID),
@@ -355,9 +356,9 @@ func (p *appProjection) reduceAPIConfigAdded(event eventstore.Event) (*handler.S
handler.NewCol(AppAPIConfigColumnClientSecret, e.ClientSecret),
handler.NewCol(AppAPIConfigColumnAuthMethod, e.AuthMethodType),
},
- crdb.WithTableSuffix(appAPITableSuffix),
+ handler.WithTableSuffix(appAPITableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
@@ -383,19 +384,19 @@ func (p *appProjection) reduceAPIConfigChanged(event eventstore.Event) (*handler
cols = append(cols, handler.NewCol(AppAPIConfigColumnAuthMethod, *e.AuthMethodType))
}
if len(cols) == 0 {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
cols,
[]handler.Condition{
handler.NewCond(AppAPIConfigColumnAppID, e.AppID),
handler.NewCond(AppAPIConfigColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(appAPITableSuffix),
+ handler.WithTableSuffix(appAPITableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
@@ -413,9 +414,9 @@ func (p *appProjection) reduceAPIConfigSecretChanged(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ttb0I", "reduce.wrong.event.type %s", project.APIConfigSecretChangedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppAPIConfigColumnClientSecret, e.ClientSecret),
},
@@ -423,9 +424,9 @@ func (p *appProjection) reduceAPIConfigSecretChanged(event eventstore.Event) (*h
handler.NewCond(AppAPIConfigColumnAppID, e.AppID),
handler.NewCond(AppAPIConfigColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(appAPITableSuffix),
+ handler.WithTableSuffix(appAPITableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
@@ -443,33 +444,33 @@ func (p *appProjection) reduceOIDCConfigAdded(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-GNHU1", "reduce.wrong.event.type %s", project.OIDCConfigAddedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(AppOIDCConfigColumnAppID, e.AppID),
handler.NewCol(AppOIDCConfigColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCol(AppOIDCConfigColumnVersion, e.Version),
handler.NewCol(AppOIDCConfigColumnClientID, e.ClientID),
handler.NewCol(AppOIDCConfigColumnClientSecret, e.ClientSecret),
- handler.NewCol(AppOIDCConfigColumnRedirectUris, database.StringArray(e.RedirectUris)),
- handler.NewCol(AppOIDCConfigColumnResponseTypes, database.EnumArray[domain.OIDCResponseType](e.ResponseTypes)),
- handler.NewCol(AppOIDCConfigColumnGrantTypes, database.EnumArray[domain.OIDCGrantType](e.GrantTypes)),
+ handler.NewCol(AppOIDCConfigColumnRedirectUris, database.TextArray[string](e.RedirectUris)),
+ handler.NewCol(AppOIDCConfigColumnResponseTypes, database.Array[domain.OIDCResponseType](e.ResponseTypes)),
+ handler.NewCol(AppOIDCConfigColumnGrantTypes, database.Array[domain.OIDCGrantType](e.GrantTypes)),
handler.NewCol(AppOIDCConfigColumnApplicationType, e.ApplicationType),
handler.NewCol(AppOIDCConfigColumnAuthMethodType, e.AuthMethodType),
- handler.NewCol(AppOIDCConfigColumnPostLogoutRedirectUris, database.StringArray(e.PostLogoutRedirectUris)),
+ handler.NewCol(AppOIDCConfigColumnPostLogoutRedirectUris, database.TextArray[string](e.PostLogoutRedirectUris)),
handler.NewCol(AppOIDCConfigColumnDevMode, e.DevMode),
handler.NewCol(AppOIDCConfigColumnAccessTokenType, e.AccessTokenType),
handler.NewCol(AppOIDCConfigColumnAccessTokenRoleAssertion, e.AccessTokenRoleAssertion),
handler.NewCol(AppOIDCConfigColumnIDTokenRoleAssertion, e.IDTokenRoleAssertion),
handler.NewCol(AppOIDCConfigColumnIDTokenUserinfoAssertion, e.IDTokenUserinfoAssertion),
handler.NewCol(AppOIDCConfigColumnClockSkew, e.ClockSkew),
- handler.NewCol(AppOIDCConfigColumnAdditionalOrigins, database.StringArray(e.AdditionalOrigins)),
+ handler.NewCol(AppOIDCConfigColumnAdditionalOrigins, database.TextArray[string](e.AdditionalOrigins)),
handler.NewCol(AppOIDCConfigColumnSkipNativeAppSuccessPage, e.SkipNativeAppSuccessPage),
},
- crdb.WithTableSuffix(appOIDCTableSuffix),
+ handler.WithTableSuffix(appOIDCTableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
@@ -493,13 +494,13 @@ func (p *appProjection) reduceOIDCConfigChanged(event eventstore.Event) (*handle
cols = append(cols, handler.NewCol(AppOIDCConfigColumnVersion, *e.Version))
}
if e.RedirectUris != nil {
- cols = append(cols, handler.NewCol(AppOIDCConfigColumnRedirectUris, database.StringArray(*e.RedirectUris)))
+ cols = append(cols, handler.NewCol(AppOIDCConfigColumnRedirectUris, database.TextArray[string](*e.RedirectUris)))
}
if e.ResponseTypes != nil {
- cols = append(cols, handler.NewCol(AppOIDCConfigColumnResponseTypes, database.EnumArray[domain.OIDCResponseType](*e.ResponseTypes)))
+ cols = append(cols, handler.NewCol(AppOIDCConfigColumnResponseTypes, database.Array[domain.OIDCResponseType](*e.ResponseTypes)))
}
if e.GrantTypes != nil {
- cols = append(cols, handler.NewCol(AppOIDCConfigColumnGrantTypes, database.EnumArray[domain.OIDCGrantType](*e.GrantTypes)))
+ cols = append(cols, handler.NewCol(AppOIDCConfigColumnGrantTypes, database.Array[domain.OIDCGrantType](*e.GrantTypes)))
}
if e.ApplicationType != nil {
cols = append(cols, handler.NewCol(AppOIDCConfigColumnApplicationType, *e.ApplicationType))
@@ -508,7 +509,7 @@ func (p *appProjection) reduceOIDCConfigChanged(event eventstore.Event) (*handle
cols = append(cols, handler.NewCol(AppOIDCConfigColumnAuthMethodType, *e.AuthMethodType))
}
if e.PostLogoutRedirectUris != nil {
- cols = append(cols, handler.NewCol(AppOIDCConfigColumnPostLogoutRedirectUris, database.StringArray(*e.PostLogoutRedirectUris)))
+ cols = append(cols, handler.NewCol(AppOIDCConfigColumnPostLogoutRedirectUris, database.TextArray[string](*e.PostLogoutRedirectUris)))
}
if e.DevMode != nil {
cols = append(cols, handler.NewCol(AppOIDCConfigColumnDevMode, *e.DevMode))
@@ -529,27 +530,27 @@ func (p *appProjection) reduceOIDCConfigChanged(event eventstore.Event) (*handle
cols = append(cols, handler.NewCol(AppOIDCConfigColumnClockSkew, *e.ClockSkew))
}
if e.AdditionalOrigins != nil {
- cols = append(cols, handler.NewCol(AppOIDCConfigColumnAdditionalOrigins, database.StringArray(*e.AdditionalOrigins)))
+ cols = append(cols, handler.NewCol(AppOIDCConfigColumnAdditionalOrigins, database.TextArray[string](*e.AdditionalOrigins)))
}
if e.SkipNativeAppSuccessPage != nil {
cols = append(cols, handler.NewCol(AppOIDCConfigColumnSkipNativeAppSuccessPage, *e.SkipNativeAppSuccessPage))
}
if len(cols) == 0 {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
cols,
[]handler.Condition{
handler.NewCond(AppOIDCConfigColumnAppID, e.AppID),
handler.NewCond(AppOIDCConfigColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(appOIDCTableSuffix),
+ handler.WithTableSuffix(appOIDCTableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
@@ -567,9 +568,9 @@ func (p *appProjection) reduceOIDCConfigSecretChanged(event eventstore.Event) (*
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-GNHU1", "reduce.wrong.event.type %s", project.OIDCConfigSecretChangedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppOIDCConfigColumnClientSecret, e.ClientSecret),
},
@@ -577,9 +578,9 @@ func (p *appProjection) reduceOIDCConfigSecretChanged(event eventstore.Event) (*
handler.NewCond(AppOIDCConfigColumnAppID, e.AppID),
handler.NewCond(AppOIDCConfigColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(appOIDCTableSuffix),
+ handler.WithTableSuffix(appOIDCTableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
@@ -598,7 +599,7 @@ func (p *appProjection) reduceOwnerRemoved(event eventstore.Event) (*handler.Sta
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Hyd1f", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(AppColumnInstanceID, e.Aggregate().InstanceID),
@@ -612,9 +613,9 @@ func (p *appProjection) reduceSAMLConfigAdded(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgument(nil, "HANDL-GMHU1", "reduce.wrong.event.type")
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(AppSAMLConfigColumnAppID, e.AppID),
handler.NewCol(AppSAMLConfigColumnInstanceID, e.Aggregate().InstanceID),
@@ -622,9 +623,9 @@ func (p *appProjection) reduceSAMLConfigAdded(event eventstore.Event) (*handler.
handler.NewCol(AppSAMLConfigColumnMetadata, e.Metadata),
handler.NewCol(AppSAMLConfigColumnMetadataURL, e.MetadataURL),
},
- crdb.WithTableSuffix(appSAMLTableSuffix),
+ handler.WithTableSuffix(appSAMLTableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
@@ -655,20 +656,20 @@ func (p *appProjection) reduceSAMLConfigChanged(event eventstore.Event) (*handle
}
if len(cols) == 0 {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
cols,
[]handler.Condition{
handler.NewCond(AppSAMLConfigColumnAppID, e.AppID),
handler.NewCond(AppSAMLConfigColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(appSAMLTableSuffix),
+ handler.WithTableSuffix(appSAMLTableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(AppColumnChangeDate, e.CreationDate()),
handler.NewCol(AppColumnSequence, e.Sequence()),
diff --git a/internal/query/projection/app_test.go b/internal/query/projection/app_test.go
index fe63c29919..f595d6a36d 100644
--- a/internal/query/projection/app_test.go
+++ b/internal/query/projection/app_test.go
@@ -8,8 +8,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -28,20 +27,22 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAppAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationAddedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.ApplicationAddedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id",
"name": "my-app"
}`),
- ), project.ApplicationAddedEventMapper),
+ ),
+ project.ApplicationAddedEventMapper,
+ ),
},
reduce: (&appProjection{}).reduceAppAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -65,20 +66,20 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAppChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.ApplicationChangedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id",
"name": "my-app"
}`),
- ), project.ApplicationChangedEventMapper),
+ ), project.ApplicationChangedEventMapper),
},
reduce: (&appProjection{}).reduceAppChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -98,19 +99,19 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAppChanged no change",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.ApplicationChangedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id"
}`),
- ), project.ApplicationChangedEventMapper),
+ ), project.ApplicationChangedEventMapper),
},
reduce: (&appProjection{}).reduceAppChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -119,19 +120,19 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAppDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationDeactivatedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.ApplicationDeactivatedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id"
}`),
- ), project.ApplicationDeactivatedEventMapper),
+ ), project.ApplicationDeactivatedEventMapper),
},
reduce: (&appProjection{}).reduceAppDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -151,19 +152,19 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAppReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationReactivatedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.ApplicationReactivatedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id"
}`),
- ), project.ApplicationReactivatedEventMapper),
+ ), project.ApplicationReactivatedEventMapper),
},
reduce: (&appProjection{}).reduceAppReactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -183,19 +184,19 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAppRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationRemovedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.ApplicationRemovedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id"
}`),
- ), project.ApplicationRemovedEventMapper),
+ ), project.ApplicationRemovedEventMapper),
},
reduce: (&appProjection{}).reduceAppRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -212,17 +213,17 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceProjectRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- []byte(`{}`),
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ []byte(`{}`),
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&appProjection{}).reduceProjectRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -239,17 +240,17 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(AppColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -265,22 +266,22 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAPIConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.APIConfigAddedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.APIConfigAddedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id",
"clientId": "client-id",
"clientSecret": {},
"authMethodType": 1
}`),
- ), project.APIConfigAddedEventMapper),
+ ), project.APIConfigAddedEventMapper),
},
reduce: (&appProjection{}).reduceAPIConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -309,22 +310,22 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAPIConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.APIConfigChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.APIConfigChangedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id",
"clientId": "client-id",
"clientSecret": {},
"authMethodType": 1
}`),
- ), project.APIConfigChangedEventMapper),
+ ), project.APIConfigChangedEventMapper),
},
reduce: (&appProjection{}).reduceAPIConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -352,19 +353,19 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAPIConfigChanged noop",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.APIConfigChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.APIConfigChangedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id"
}`),
- ), project.APIConfigChangedEventMapper),
+ ), project.APIConfigChangedEventMapper),
},
reduce: (&appProjection{}).reduceAPIConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -373,20 +374,20 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceAPIConfigSecretChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.APIConfigSecretChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.APIConfigSecretChangedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id",
"client_secret": {}
}`),
- ), project.APIConfigSecretChangedEventMapper),
+ ), project.APIConfigSecretChangedEventMapper),
},
reduce: (&appProjection{}).reduceAPIConfigSecretChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -413,10 +414,11 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceOIDCConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigAddedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.OIDCConfigAddedType,
+ project.AggregateType,
+ []byte(`{
"oidcVersion": 0,
"appId": "app-id",
"clientId": "client-id",
@@ -436,13 +438,12 @@ func TestAppProjection_reduces(t *testing.T) {
"additionalOrigins": ["origin.one.ch", "origin.two.ch"],
"skipNativeAppSuccessPage": true
}`),
- ), project.OIDCConfigAddedEventMapper),
+ ), project.OIDCConfigAddedEventMapper),
},
reduce: (&appProjection{}).reduceOIDCConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -453,19 +454,19 @@ func TestAppProjection_reduces(t *testing.T) {
domain.OIDCVersionV1,
"client-id",
anyArg{},
- database.StringArray{"redirect.one.ch", "redirect.two.ch"},
- database.EnumArray[domain.OIDCResponseType]{1, 2},
- database.EnumArray[domain.OIDCGrantType]{1, 2},
+ database.TextArray[string]{"redirect.one.ch", "redirect.two.ch"},
+ database.Array[domain.OIDCResponseType]{1, 2},
+ database.Array[domain.OIDCGrantType]{1, 2},
domain.OIDCApplicationTypeNative,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"logout.one.ch", "logout.two.ch"},
+ database.TextArray[string]{"logout.one.ch", "logout.two.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
true,
true,
1 * time.Microsecond,
- database.StringArray{"origin.one.ch", "origin.two.ch"},
+ database.TextArray[string]{"origin.one.ch", "origin.two.ch"},
true,
},
},
@@ -485,10 +486,11 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceOIDCConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.OIDCConfigChangedType,
+ project.AggregateType,
+ []byte(`{
"oidcVersion": 0,
"appId": "app-id",
"redirectUris": ["redirect.one.ch", "redirect.two.ch"],
@@ -507,32 +509,31 @@ func TestAppProjection_reduces(t *testing.T) {
"skipNativeAppSuccessPage": true
}`),
- ), project.OIDCConfigChangedEventMapper),
+ ), project.OIDCConfigChangedEventMapper),
},
reduce: (&appProjection{}).reduceOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.apps5_oidc_configs SET (version, redirect_uris, response_types, grant_types, application_type, auth_method_type, post_logout_redirect_uris, is_dev_mode, access_token_type, access_token_role_assertion, id_token_role_assertion, id_token_userinfo_assertion, clock_skew, additional_origins, skip_native_app_success_page) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15) WHERE (app_id = $16) AND (instance_id = $17)",
expectedArgs: []interface{}{
domain.OIDCVersionV1,
- database.StringArray{"redirect.one.ch", "redirect.two.ch"},
- database.EnumArray[domain.OIDCResponseType]{1, 2},
- database.EnumArray[domain.OIDCGrantType]{1, 2},
+ database.TextArray[string]{"redirect.one.ch", "redirect.two.ch"},
+ database.Array[domain.OIDCResponseType]{1, 2},
+ database.Array[domain.OIDCGrantType]{1, 2},
domain.OIDCApplicationTypeNative,
domain.OIDCAuthMethodTypeNone,
- database.StringArray{"logout.one.ch", "logout.two.ch"},
+ database.TextArray[string]{"logout.one.ch", "logout.two.ch"},
true,
domain.OIDCTokenTypeJWT,
true,
true,
true,
1 * time.Microsecond,
- database.StringArray{"origin.one.ch", "origin.two.ch"},
+ database.TextArray[string]{"origin.one.ch", "origin.two.ch"},
true,
"app-id",
"instance-id",
@@ -554,19 +555,19 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceOIDCConfigChanged noop",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.OIDCConfigChangedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id"
}`),
- ), project.OIDCConfigChangedEventMapper),
+ ), project.OIDCConfigChangedEventMapper),
},
reduce: (&appProjection{}).reduceOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -575,20 +576,20 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project reduceOIDCConfigSecretChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigSecretChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.OIDCConfigSecretChangedType,
+ project.AggregateType,
+ []byte(`{
"appId": "app-id",
"client_secret": {}
}`),
- ), project.OIDCConfigSecretChangedEventMapper),
+ ), project.OIDCConfigSecretChangedEventMapper),
},
reduce: (&appProjection{}).reduceOIDCConfigSecretChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -615,17 +616,17 @@ func TestAppProjection_reduces(t *testing.T) {
{
name: "project.reduceOwnerRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
reduce: (&appProjection{}).reduceOwnerRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/auth_request.go b/internal/query/projection/auth_request.go
index b01ce175ae..193f67c585 100644
--- a/internal/query/projection/auth_request.go
+++ b/internal/query/projection/auth_request.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/authrequest"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -31,44 +31,46 @@ const (
AuthRequestColumnHintUserID = "hint_user_id"
)
-type authRequestProjection struct {
- crdb.StatementHandler
+type authRequestProjection struct{}
+
+// Name implements handler.Projection.
+func (*authRequestProjection) Name() string {
+ return AuthRequestsProjectionTable
}
-func newAuthRequestProjection(ctx context.Context, config crdb.StatementHandlerConfig) *authRequestProjection {
- p := new(authRequestProjection)
- config.ProjectionName = AuthRequestsProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(AuthRequestColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(AuthRequestColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AuthRequestColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AuthRequestColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(AuthRequestColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(AuthRequestColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(AuthRequestColumnLoginClient, crdb.ColumnTypeText),
- crdb.NewColumn(AuthRequestColumnClientID, crdb.ColumnTypeText),
- crdb.NewColumn(AuthRequestColumnRedirectURI, crdb.ColumnTypeText),
- crdb.NewColumn(AuthRequestColumnScope, crdb.ColumnTypeTextArray),
- crdb.NewColumn(AuthRequestColumnPrompt, crdb.ColumnTypeEnumArray, crdb.Nullable()),
- crdb.NewColumn(AuthRequestColumnUILocales, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(AuthRequestColumnMaxAge, crdb.ColumnTypeInt64, crdb.Nullable()),
- crdb.NewColumn(AuthRequestColumnLoginHint, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(AuthRequestColumnHintUserID, crdb.ColumnTypeText, crdb.Nullable()),
+func newAuthRequestProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(authRequestProjection))
+}
+
+func (*authRequestProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(AuthRequestColumnID, handler.ColumnTypeText),
+ handler.NewColumn(AuthRequestColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AuthRequestColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AuthRequestColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(AuthRequestColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(AuthRequestColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(AuthRequestColumnLoginClient, handler.ColumnTypeText),
+ handler.NewColumn(AuthRequestColumnClientID, handler.ColumnTypeText),
+ handler.NewColumn(AuthRequestColumnRedirectURI, handler.ColumnTypeText),
+ handler.NewColumn(AuthRequestColumnScope, handler.ColumnTypeTextArray),
+ handler.NewColumn(AuthRequestColumnPrompt, handler.ColumnTypeEnumArray, handler.Nullable()),
+ handler.NewColumn(AuthRequestColumnUILocales, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(AuthRequestColumnMaxAge, handler.ColumnTypeInt64, handler.Nullable()),
+ handler.NewColumn(AuthRequestColumnLoginHint, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(AuthRequestColumnHintUserID, handler.ColumnTypeText, handler.Nullable()),
},
- crdb.NewPrimaryKey(AuthRequestColumnInstanceID, AuthRequestColumnID),
+ handler.NewPrimaryKey(AuthRequestColumnInstanceID, AuthRequestColumnID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *authRequestProjection) reducers() []handler.AggregateReducer {
+func (p *authRequestProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: authrequest.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: authrequest.AddedType,
Reduce: p.reduceAuthRequestAdded,
@@ -85,7 +87,7 @@ func (p *authRequestProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(AuthRequestColumnInstanceID),
@@ -101,7 +103,7 @@ func (p *authRequestProjection) reduceAuthRequestAdded(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Sfwfa", "reduce.wrong.event.type %s", authrequest.AddedType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(AuthRequestColumnID, e.Aggregate().ID),
@@ -132,7 +134,7 @@ func (p *authRequestProjection) reduceAuthRequestEnded(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ASF3h", "reduce.wrong.event.type %s", []eventstore.EventType{authrequest.SucceededType, authrequest.FailedType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(AuthRequestColumnID, event.Aggregate().ID),
diff --git a/internal/query/projection/auth_request_test.go b/internal/query/projection/auth_request_test.go
index f0ce0651d4..bda25fdf37 100644
--- a/internal/query/projection/auth_request_test.go
+++ b/internal/query/projection/auth_request_test.go
@@ -9,7 +9,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/authrequest"
)
@@ -34,9 +34,8 @@ func TestAuthRequestProjection_reduces(t *testing.T) {
},
reduce: (&authRequestProjection{}).reduceAuthRequestAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("auth_request"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("auth_request"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -74,9 +73,8 @@ func TestAuthRequestProjection_reduces(t *testing.T) {
},
reduce: (&authRequestProjection{}).reduceAuthRequestEnded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("auth_request"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("auth_request"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -101,9 +99,8 @@ func TestAuthRequestProjection_reduces(t *testing.T) {
},
reduce: (&authRequestProjection{}).reduceAuthRequestEnded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("auth_request"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("auth_request"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/authn_key.go b/internal/query/projection/authn_key.go
index 789fb7edf9..3d007dbca9 100644
--- a/internal/query/projection/authn_key.go
+++ b/internal/query/projection/authn_key.go
@@ -7,8 +7,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -33,46 +33,47 @@ const (
AuthNKeyOwnerRemovedCol = "owner_removed"
)
-type authNKeyProjection struct {
- crdb.StatementHandler
+type authNKeyProjection struct{}
+
+func newAuthNKeyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(authNKeyProjection))
}
-func newAuthNKeyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *authNKeyProjection {
- p := new(authNKeyProjection)
- config.ProjectionName = AuthNKeyTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(AuthNKeyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AuthNKeyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AuthNKeyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AuthNKeyResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(AuthNKeyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AuthNKeyAggregateIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AuthNKeySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(AuthNKeyObjectIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AuthNKeyExpirationCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AuthNKeyIdentifierCol, crdb.ColumnTypeText),
- crdb.NewColumn(AuthNKeyPublicKeyCol, crdb.ColumnTypeBytes),
- crdb.NewColumn(AuthNKeyEnabledCol, crdb.ColumnTypeBool, crdb.Default(true)),
- crdb.NewColumn(AuthNKeyTypeCol, crdb.ColumnTypeEnum, crdb.Default(0)),
- crdb.NewColumn(AuthNKeyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*authNKeyProjection) Name() string {
+ return AuthNKeyTable
+}
+
+func (*authNKeyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(AuthNKeyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AuthNKeyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AuthNKeyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AuthNKeyResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(AuthNKeyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AuthNKeyAggregateIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AuthNKeySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(AuthNKeyObjectIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AuthNKeyExpirationCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AuthNKeyIdentifierCol, handler.ColumnTypeText),
+ handler.NewColumn(AuthNKeyPublicKeyCol, handler.ColumnTypeBytes),
+ handler.NewColumn(AuthNKeyEnabledCol, handler.ColumnTypeBool, handler.Default(true)),
+ handler.NewColumn(AuthNKeyTypeCol, handler.ColumnTypeEnum, handler.Default(0)),
+ handler.NewColumn(AuthNKeyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(AuthNKeyInstanceIDCol, AuthNKeyIDCol),
- crdb.WithIndex(crdb.NewIndex("enabled", []string{AuthNKeyEnabledCol})),
- crdb.WithIndex(crdb.NewIndex("identifier", []string{AuthNKeyIdentifierCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{AuthNKeyOwnerRemovedCol})),
+ handler.NewPrimaryKey(AuthNKeyInstanceIDCol, AuthNKeyIDCol),
+ handler.WithIndex(handler.NewIndex("enabled", []string{AuthNKeyEnabledCol})),
+ handler.WithIndex(handler.NewIndex("identifier", []string{AuthNKeyIdentifierCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{AuthNKeyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *authNKeyProjection) reducers() []handler.AggregateReducer {
+func (p *authNKeyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.ApplicationKeyAddedEventType,
Reduce: p.reduceAuthNKeyAdded,
@@ -101,7 +102,7 @@ func (p *authNKeyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.MachineKeyAddedEventType,
Reduce: p.reduceAuthNKeyAdded,
@@ -118,7 +119,7 @@ func (p *authNKeyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -127,7 +128,7 @@ func (p *authNKeyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(AuthNKeyInstanceIDCol),
@@ -167,7 +168,7 @@ func (p *authNKeyProjection) reduceAuthNKeyAdded(event eventstore.Event) (*handl
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Dgb32", "reduce.wrong.event.type %v", []eventstore.EventType{project.ApplicationKeyAddedEventType, user.MachineKeyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&authNKeyEvent,
[]handler.Column{
handler.NewCol(AuthNKeyIDCol, authNKeyEvent.keyID),
@@ -194,7 +195,7 @@ func (p *authNKeyProjection) reduceAuthNKeyEnabledChanged(event eventstore.Event
switch e := event.(type) {
case *project.APIConfigChangedEvent:
if e.AuthMethodType == nil {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
appID = e.AppID
enabled = *e.AuthMethodType == domain.APIAuthMethodTypePrivateKeyJWT
@@ -202,7 +203,7 @@ func (p *authNKeyProjection) reduceAuthNKeyEnabledChanged(event eventstore.Event
sequence = e.Sequence()
case *project.OIDCConfigChangedEvent:
if e.AuthMethodType == nil {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
appID = e.AppID
enabled = *e.AuthMethodType == domain.OIDCAuthMethodTypePrivateKeyJWT
@@ -211,7 +212,7 @@ func (p *authNKeyProjection) reduceAuthNKeyEnabledChanged(event eventstore.Event
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Dbrt1", "reduce.wrong.event.type %v", []eventstore.EventType{project.APIConfigChangedType, project.OIDCConfigChangedType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
handler.NewCol(AuthNKeyChangeDateCol, changeDate),
@@ -241,7 +242,7 @@ func (p *authNKeyProjection) reduceAuthNKeyRemoved(event eventstore.Event) (*han
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-BGge42", "reduce.wrong.event.type %v", []eventstore.EventType{project.ApplicationKeyRemovedEventType, project.ApplicationRemovedType, project.ProjectRemovedType, user.MachineKeyRemovedEventType, user.UserRemovedType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
condition,
@@ -256,7 +257,7 @@ func (p *authNKeyProjection) reduceOwnerRemoved(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Hyd1f", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(AuthNKeyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/authn_key_test.go b/internal/query/projection/authn_key_test.go
index c1341fb647..bc016f3758 100644
--- a/internal/query/projection/authn_key_test.go
+++ b/internal/query/projection/authn_key_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -27,17 +26,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyAdded app",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationKeyAddedEventType),
- project.AggregateType,
- []byte(`{"applicationId": "appId", "clientId":"clientId","keyId": "keyId", "type": 1, "expirationDate": "2021-11-30T15:00:00Z", "publicKey": "cHVibGljS2V5"}`),
- ), project.ApplicationKeyAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ApplicationKeyAddedEventType,
+ project.AggregateType,
+ []byte(`{"applicationId": "appId", "clientId":"clientId","keyId": "keyId", "type": 1, "expirationDate": "2021-11-30T15:00:00Z", "publicKey": "cHVibGljS2V5"}`),
+ ), project.ApplicationKeyAddedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -64,17 +63,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyAdded user",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineKeyAddedEventType),
- user.AggregateType,
- []byte(`{"keyId": "keyId", "type": 1, "expirationDate": "2021-11-30T15:00:00Z", "publicKey": "cHVibGljS2V5"}`),
- ), user.MachineKeyAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.MachineKeyAddedEventType,
+ user.AggregateType,
+ []byte(`{"keyId": "keyId", "type": 1, "expirationDate": "2021-11-30T15:00:00Z", "publicKey": "cHVibGljS2V5"}`),
+ ), user.MachineKeyAddedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -101,17 +100,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyRemoved app key",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationKeyRemovedEventType),
- project.AggregateType,
- []byte(`{"keyId": "keyId"}`),
- ), project.ApplicationKeyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ApplicationKeyRemovedEventType,
+ project.AggregateType,
+ []byte(`{"keyId": "keyId"}`),
+ ), project.ApplicationKeyRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -128,17 +127,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyEnabledChanged api no change",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.APIConfigChangedType),
- project.AggregateType,
- []byte(`{"appId": "appId"}`),
- ), project.APIConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.APIConfigChangedType,
+ project.AggregateType,
+ []byte(`{"appId": "appId"}`),
+ ), project.APIConfigChangedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyEnabledChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -147,17 +146,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyEnabledChanged api config basic",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.APIConfigChangedType),
- project.AggregateType,
- []byte(`{"appId": "appId", "authMethodType": 0}`),
- ), project.APIConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.APIConfigChangedType,
+ project.AggregateType,
+ []byte(`{"appId": "appId", "authMethodType": 0}`),
+ ), project.APIConfigChangedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyEnabledChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -177,17 +176,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyEnabledChanged api config jwt",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.APIConfigChangedType),
- project.AggregateType,
- []byte(`{"appId": "appId", "authMethodType": 1}`),
- ), project.APIConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.APIConfigChangedType,
+ project.AggregateType,
+ []byte(`{"appId": "appId", "authMethodType": 1}`),
+ ), project.APIConfigChangedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyEnabledChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -207,17 +206,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyRemoved app key",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineKeyRemovedEventType),
- user.AggregateType,
- []byte(`{"keyId": "keyId"}`),
- ), user.MachineKeyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.MachineKeyRemovedEventType,
+ user.AggregateType,
+ []byte(`{"keyId": "keyId"}`),
+ ), user.MachineKeyRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -234,17 +233,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(AuthNKeyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -260,17 +259,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyEnabledChanged oidc no change",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigChangedType),
- project.AggregateType,
- []byte(`{"appId": "appId"}`),
- ), project.OIDCConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.OIDCConfigChangedType,
+ project.AggregateType,
+ []byte(`{"appId": "appId"}`),
+ ), project.OIDCConfigChangedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyEnabledChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -279,17 +278,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyEnabledChanged oidc config basic",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigChangedType),
- project.AggregateType,
- []byte(`{"appId": "appId", "authMethodType": 0}`),
- ), project.OIDCConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.OIDCConfigChangedType,
+ project.AggregateType,
+ []byte(`{"appId": "appId", "authMethodType": 0}`),
+ ), project.OIDCConfigChangedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyEnabledChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -309,17 +308,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyEnabledChanged oidc config jwt",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigChangedType),
- project.AggregateType,
- []byte(`{"appId": "appId", "authMethodType": 3}`),
- ), project.OIDCConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.OIDCConfigChangedType,
+ project.AggregateType,
+ []byte(`{"appId": "appId", "authMethodType": 3}`),
+ ), project.OIDCConfigChangedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyEnabledChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -339,17 +338,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyRemoved app key removed",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationKeyRemovedEventType),
- project.AggregateType,
- []byte(`{"keyId": "keyId"}`),
- ), project.ApplicationKeyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ApplicationKeyRemovedEventType,
+ project.AggregateType,
+ []byte(`{"keyId": "keyId"}`),
+ ), project.ApplicationKeyRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -366,17 +365,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyRemoved app removed",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ApplicationRemovedType),
- project.AggregateType,
- []byte(`{"appId": "appId"}`),
- ), project.ApplicationRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ApplicationRemovedType,
+ project.AggregateType,
+ []byte(`{"appId": "appId"}`),
+ ), project.ApplicationRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -393,17 +392,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyRemoved project removed",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- nil,
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ nil,
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -420,17 +419,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyRemoved machine key removed",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineKeyRemovedEventType),
- user.AggregateType,
- []byte(`{"keyId": "keyId"}`),
- ), user.MachineKeyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.MachineKeyRemovedEventType,
+ user.AggregateType,
+ []byte(`{"keyId": "keyId"}`),
+ ), user.MachineKeyRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -447,17 +446,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceAuthNKeyRemoved user removed",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{"keyId": "keyId"}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{"keyId": "keyId"}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceAuthNKeyRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -474,17 +473,17 @@ func TestAuthNKeyProjection_reduces(t *testing.T) {
{
name: "reduceOwnerRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
reduce: (&authNKeyProjection{}).reduceOwnerRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/config.go b/internal/query/projection/config.go
index 355913639f..d1a79f1c20 100644
--- a/internal/query/projection/config.go
+++ b/internal/query/projection/config.go
@@ -7,18 +7,20 @@ import (
type Config struct {
RequeueEvery time.Duration
RetryFailedAfter time.Duration
- MaxFailureCount uint
+ MaxFailureCount uint8
ConcurrentInstances uint
BulkLimit uint64
Customizations map[string]CustomConfig
HandleActiveInstances time.Duration
+ TransactionDuration time.Duration
}
type CustomConfig struct {
RequeueEvery *time.Duration
RetryFailedAfter *time.Duration
- MaxFailureCount *uint
+ MaxFailureCount *uint8
ConcurrentInstances *uint
- BulkLimit *uint64
+ BulkLimit *uint16
HandleActiveInstances *time.Duration
+ TransactionDuration *time.Duration
}
diff --git a/internal/query/projection/custom_text.go b/internal/query/projection/custom_text.go
index b2e3650c46..a406f4e50b 100644
--- a/internal/query/projection/custom_text.go
+++ b/internal/query/projection/custom_text.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -28,41 +28,42 @@ const (
CustomTextOwnerRemovedCol = "owner_removed"
)
-type customTextProjection struct {
- crdb.StatementHandler
+type customTextProjection struct{}
+
+func newCustomTextProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(customTextProjection))
}
-func newCustomTextProjection(ctx context.Context, config crdb.StatementHandlerConfig) *customTextProjection {
- p := new(customTextProjection)
- config.ProjectionName = CustomTextTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(CustomTextAggregateIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(CustomTextInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(CustomTextCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(CustomTextChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(CustomTextSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(CustomTextIsDefaultCol, crdb.ColumnTypeBool),
- crdb.NewColumn(CustomTextTemplateCol, crdb.ColumnTypeText),
- crdb.NewColumn(CustomTextLanguageCol, crdb.ColumnTypeText),
- crdb.NewColumn(CustomTextKeyCol, crdb.ColumnTypeText),
- crdb.NewColumn(CustomTextTextCol, crdb.ColumnTypeText),
- crdb.NewColumn(CustomTextOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*customTextProjection) Name() string {
+ return CustomTextTable
+}
+
+func (*customTextProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(CustomTextAggregateIDCol, handler.ColumnTypeText),
+ handler.NewColumn(CustomTextInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(CustomTextCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(CustomTextChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(CustomTextSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(CustomTextIsDefaultCol, handler.ColumnTypeBool),
+ handler.NewColumn(CustomTextTemplateCol, handler.ColumnTypeText),
+ handler.NewColumn(CustomTextLanguageCol, handler.ColumnTypeText),
+ handler.NewColumn(CustomTextKeyCol, handler.ColumnTypeText),
+ handler.NewColumn(CustomTextTextCol, handler.ColumnTypeText),
+ handler.NewColumn(CustomTextOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(CustomTextInstanceIDCol, CustomTextAggregateIDCol, CustomTextTemplateCol, CustomTextKeyCol, CustomTextLanguageCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{CustomTextOwnerRemovedCol})),
+ handler.NewPrimaryKey(CustomTextInstanceIDCol, CustomTextAggregateIDCol, CustomTextTemplateCol, CustomTextKeyCol, CustomTextLanguageCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{CustomTextOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *customTextProjection) reducers() []handler.AggregateReducer {
+func (p *customTextProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.CustomTextSetEventType,
Reduce: p.reduceSet,
@@ -83,7 +84,7 @@ func (p *customTextProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.CustomTextSetEventType,
Reduce: p.reduceSet,
@@ -118,7 +119,7 @@ func (p *customTextProjection) reduceSet(event eventstore.Event) (*handler.State
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-KKfw4", "reduce.wrong.event.type %v", []eventstore.EventType{org.CustomTextSetEventType, instance.CustomTextSetEventType})
}
- return crdb.NewUpsertStatement(
+ return handler.NewUpsertStatement(
&customTextEvent,
[]handler.Column{
handler.NewCol(CustomTextInstanceIDCol, nil),
@@ -151,7 +152,7 @@ func (p *customTextProjection) reduceRemoved(event eventstore.Event) (*handler.S
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-n9wJg", "reduce.wrong.event.type %v", []eventstore.EventType{org.CustomTextRemovedEventType, instance.CustomTextRemovedEventType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
&customTextEvent,
[]handler.Condition{
handler.NewCond(CustomTextAggregateIDCol, customTextEvent.Aggregate().ID),
@@ -172,7 +173,7 @@ func (p *customTextProjection) reduceTemplateRemoved(event eventstore.Event) (*h
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-29iPf", "reduce.wrong.event.type %v", []eventstore.EventType{org.CustomTextTemplateRemovedEventType, instance.CustomTextTemplateRemovedEventType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
&customTextEvent,
[]handler.Condition{
handler.NewCond(CustomTextAggregateIDCol, customTextEvent.Aggregate().ID),
@@ -188,7 +189,7 @@ func (p *customTextProjection) reduceOwnerRemoved(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-V2T3z", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(CustomTextInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/custom_text_test.go b/internal/query/projection/custom_text_test.go
index f6889cf40e..951e236cf7 100644
--- a/internal/query/projection/custom_text_test.go
+++ b/internal/query/projection/custom_text_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -24,22 +23,22 @@ func TestCustomTextProjection_reduces(t *testing.T) {
{
name: "org reduceSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&customTextProjection{}).reduceSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -65,20 +64,20 @@ func TestCustomTextProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (&customTextProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -99,20 +98,20 @@ func TestCustomTextProjection_reduces(t *testing.T) {
name: "org reduceTemplateRemoved",
reduce: (&customTextProjection{}).reduceTemplateRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextTemplateRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextTemplateRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextTemplateRemovedEventMapper),
+ ), org.CustomTextTemplateRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -131,17 +130,17 @@ func TestCustomTextProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(CustomTextInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -158,21 +157,21 @@ func TestCustomTextProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (&customTextProjection{}).reduceSet,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.CustomTextSetEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.CustomTextSetEventType,
+ instance.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), instance.CustomTextSetEventMapper),
+ ), instance.CustomTextSetEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -198,20 +197,20 @@ func TestCustomTextProjection_reduces(t *testing.T) {
name: "instance reduceRemoved",
reduce: (&customTextProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.CustomTextTemplateRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.CustomTextTemplateRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode"
}`),
- ), instance.CustomTextRemovedEventMapper),
+ ), instance.CustomTextRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -232,20 +231,20 @@ func TestCustomTextProjection_reduces(t *testing.T) {
name: "instance reduceTemplateRemoved",
reduce: (&customTextProjection{}).reduceTemplateRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.CustomTextTemplateRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.CustomTextTemplateRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode"
}`),
- ), instance.CustomTextTemplateRemovedEventMapper),
+ ), instance.CustomTextTemplateRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -265,16 +264,16 @@ func TestCustomTextProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&customTextProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/debug_notification.go b/internal/query/projection/debug_notification.go
index 9eff62ee8d..7d553ed0b1 100644
--- a/internal/query/projection/debug_notification.go
+++ b/internal/query/projection/debug_notification.go
@@ -8,8 +8,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -27,38 +27,39 @@ const (
DebugNotificationProviderCompactCol = "compact"
)
-type debugNotificationProviderProjection struct {
- crdb.StatementHandler
+type debugNotificationProviderProjection struct{}
+
+func newDebugNotificationProviderProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(debugNotificationProviderProjection))
}
-func newDebugNotificationProviderProjection(ctx context.Context, config crdb.StatementHandlerConfig) *debugNotificationProviderProjection {
- p := &debugNotificationProviderProjection{}
- config.ProjectionName = DebugNotificationProviderTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(DebugNotificationProviderAggIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(DebugNotificationProviderCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(DebugNotificationProviderChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(DebugNotificationProviderSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(DebugNotificationProviderResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(DebugNotificationProviderInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(DebugNotificationProviderStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(DebugNotificationProviderTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(DebugNotificationProviderCompactCol, crdb.ColumnTypeBool),
+func (*debugNotificationProviderProjection) Name() string {
+ return DebugNotificationProviderTable
+}
+
+func (*debugNotificationProviderProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(DebugNotificationProviderAggIDCol, handler.ColumnTypeText),
+ handler.NewColumn(DebugNotificationProviderCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(DebugNotificationProviderChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(DebugNotificationProviderSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(DebugNotificationProviderResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(DebugNotificationProviderInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(DebugNotificationProviderStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(DebugNotificationProviderTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(DebugNotificationProviderCompactCol, handler.ColumnTypeBool),
},
- crdb.NewPrimaryKey(DebugNotificationProviderInstanceIDCol, DebugNotificationProviderAggIDCol, DebugNotificationProviderTypeCol),
+ handler.NewPrimaryKey(DebugNotificationProviderInstanceIDCol, DebugNotificationProviderAggIDCol, DebugNotificationProviderTypeCol),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *debugNotificationProviderProjection) reducers() []handler.AggregateReducer {
+func (p *debugNotificationProviderProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.DebugNotificationProviderFileAddedEventType,
Reduce: p.reduceDebugNotificationProviderAdded,
@@ -106,7 +107,7 @@ func (p *debugNotificationProviderProjection) reduceDebugNotificationProviderAdd
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-pYPxS", "reduce.wrong.event.type %v", []eventstore.EventType{instance.DebugNotificationProviderFileAddedEventType, instance.DebugNotificationProviderLogAddedEventType})
}
- return crdb.NewCreateStatement(&providerEvent, []handler.Column{
+ return handler.NewCreateStatement(&providerEvent, []handler.Column{
handler.NewCol(DebugNotificationProviderAggIDCol, providerEvent.Aggregate().ID),
handler.NewCol(DebugNotificationProviderCreationDateCol, providerEvent.CreationDate()),
handler.NewCol(DebugNotificationProviderChangeDateCol, providerEvent.CreationDate()),
@@ -141,7 +142,7 @@ func (p *debugNotificationProviderProjection) reduceDebugNotificationProviderCha
cols = append(cols, handler.NewCol(DebugNotificationProviderCompactCol, *providerEvent.Compact))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&providerEvent,
cols,
[]handler.Condition{
@@ -166,7 +167,7 @@ func (p *debugNotificationProviderProjection) reduceDebugNotificationProviderRem
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-dow9f", "reduce.wrong.event.type %v", []eventstore.EventType{instance.DebugNotificationProviderFileRemovedEventType, instance.DebugNotificationProviderLogRemovedEventType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
&providerEvent,
[]handler.Condition{
handler.NewCond(DebugNotificationProviderAggIDCol, providerEvent.Aggregate().ID),
diff --git a/internal/query/projection/debug_notification_provider_test.go b/internal/query/projection/debug_notification_provider_test.go
index ec22287e5f..cbe943a7ae 100644
--- a/internal/query/projection/debug_notification_provider_test.go
+++ b/internal/query/projection/debug_notification_provider_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -25,18 +24,18 @@ func TestDebugNotificationProviderProjection_reduces(t *testing.T) {
name: "instance reduceNotificationProviderFileAdded",
reduce: (&debugNotificationProviderProjection{}).reduceDebugNotificationProviderAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DebugNotificationProviderFileAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DebugNotificationProviderFileAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"compact": true
}`),
- ), instance.DebugNotificationProviderFileAddedEventMapper),
+ ), instance.DebugNotificationProviderFileAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -61,18 +60,18 @@ func TestDebugNotificationProviderProjection_reduces(t *testing.T) {
name: "instance reduceNotificationProviderFileChanged",
reduce: (&debugNotificationProviderProjection{}).reduceDebugNotificationProviderChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DebugNotificationProviderFileChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DebugNotificationProviderFileChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"compact": true
}`),
- ), instance.DebugNotificationProviderFileChangedEventMapper),
+ ), instance.DebugNotificationProviderFileChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -94,16 +93,16 @@ func TestDebugNotificationProviderProjection_reduces(t *testing.T) {
name: "instance reduceNotificationProviderFileRemoved",
reduce: (&debugNotificationProviderProjection{}).reduceDebugNotificationProviderRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DebugNotificationProviderFileRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.DebugNotificationProviderFileRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.DebugNotificationProviderFileRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.DebugNotificationProviderFileRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -122,18 +121,18 @@ func TestDebugNotificationProviderProjection_reduces(t *testing.T) {
name: "instance reduceNotificationProviderLogAdded",
reduce: (&debugNotificationProviderProjection{}).reduceDebugNotificationProviderAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DebugNotificationProviderLogAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DebugNotificationProviderLogAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"compact": true
}`),
- ), instance.DebugNotificationProviderLogAddedEventMapper),
+ ), instance.DebugNotificationProviderLogAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -158,18 +157,18 @@ func TestDebugNotificationProviderProjection_reduces(t *testing.T) {
name: "instance reduceNotificationProviderLogChanged",
reduce: (&debugNotificationProviderProjection{}).reduceDebugNotificationProviderChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DebugNotificationProviderLogChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DebugNotificationProviderLogChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"compact": true
}`),
- ), instance.DebugNotificationProviderLogChangedEventMapper),
+ ), instance.DebugNotificationProviderLogChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -191,16 +190,16 @@ func TestDebugNotificationProviderProjection_reduces(t *testing.T) {
name: "instance reduceNotificationProviderLogRemoved",
reduce: (&debugNotificationProviderProjection{}).reduceDebugNotificationProviderRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DebugNotificationProviderLogRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.DebugNotificationProviderLogRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.DebugNotificationProviderLogRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.DebugNotificationProviderLogRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -218,17 +217,17 @@ func TestDebugNotificationProviderProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(DebugNotificationProviderInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/device_auth.go b/internal/query/projection/device_auth.go
index c678dbd301..f0232192e8 100644
--- a/internal/query/projection/device_auth.go
+++ b/internal/query/projection/device_auth.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/deviceauth"
)
@@ -29,44 +29,44 @@ const (
DeviceAuthColumnInstanceID = "instance_id"
)
-type deviceAuthProjection struct {
- crdb.StatementHandler
+type deviceAuthProjection struct{}
+
+func newDeviceAuthProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(deviceAuthProjection))
}
-func newDeviceAuthProjection(ctx context.Context, config crdb.StatementHandlerConfig) *deviceAuthProjection {
- p := new(deviceAuthProjection)
- config.ProjectionName = DeviceAuthProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(DeviceAuthColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(DeviceAuthColumnClientID, crdb.ColumnTypeText),
- crdb.NewColumn(DeviceAuthColumnDeviceCode, crdb.ColumnTypeText),
- crdb.NewColumn(DeviceAuthColumnUserCode, crdb.ColumnTypeText),
- crdb.NewColumn(DeviceAuthColumnExpires, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(DeviceAuthColumnScopes, crdb.ColumnTypeTextArray),
- crdb.NewColumn(DeviceAuthColumnState, crdb.ColumnTypeEnum, crdb.Default(domain.DeviceAuthStateInitiated)),
- crdb.NewColumn(DeviceAuthColumnSubject, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(DeviceAuthColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(DeviceAuthColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(DeviceAuthColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(DeviceAuthColumnInstanceID, crdb.ColumnTypeText),
+func (*deviceAuthProjection) Name() string {
+ return DeviceAuthProjectionTable
+}
+
+func (*deviceAuthProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(DeviceAuthColumnID, handler.ColumnTypeText),
+ handler.NewColumn(DeviceAuthColumnClientID, handler.ColumnTypeText),
+ handler.NewColumn(DeviceAuthColumnDeviceCode, handler.ColumnTypeText),
+ handler.NewColumn(DeviceAuthColumnUserCode, handler.ColumnTypeText),
+ handler.NewColumn(DeviceAuthColumnExpires, handler.ColumnTypeTimestamp),
+ handler.NewColumn(DeviceAuthColumnScopes, handler.ColumnTypeTextArray),
+ handler.NewColumn(DeviceAuthColumnState, handler.ColumnTypeEnum, handler.Default(domain.DeviceAuthStateInitiated)),
+ handler.NewColumn(DeviceAuthColumnSubject, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(DeviceAuthColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(DeviceAuthColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(DeviceAuthColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(DeviceAuthColumnInstanceID, handler.ColumnTypeText),
},
- crdb.NewPrimaryKey(DeviceAuthColumnInstanceID, DeviceAuthColumnID),
- crdb.WithIndex(crdb.NewIndex("user_code", []string{DeviceAuthColumnInstanceID, DeviceAuthColumnUserCode})),
- crdb.WithIndex(crdb.NewIndex("device_code", []string{DeviceAuthColumnInstanceID, DeviceAuthColumnClientID, DeviceAuthColumnDeviceCode})),
+ handler.NewPrimaryKey(DeviceAuthColumnInstanceID, DeviceAuthColumnID),
+ handler.WithIndex(handler.NewIndex("user_code", []string{DeviceAuthColumnInstanceID, DeviceAuthColumnUserCode})),
+ handler.WithIndex(handler.NewIndex("device_code", []string{DeviceAuthColumnInstanceID, DeviceAuthColumnClientID, DeviceAuthColumnDeviceCode})),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *deviceAuthProjection) reducers() []handler.AggregateReducer {
+func (p *deviceAuthProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: deviceauth.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: deviceauth.AddedEventType,
Reduce: p.reduceAdded,
@@ -93,7 +93,7 @@ func (p *deviceAuthProjection) reduceAdded(event eventstore.Event) (*handler.Sta
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-chu6O", "reduce.wrong.event.type %T != %s", event, deviceauth.AddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(DeviceAuthColumnID, e.Aggregate().ID),
@@ -115,7 +115,7 @@ func (p *deviceAuthProjection) reduceAppoved(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-kei0A", "reduce.wrong.event.type %T != %s", event, deviceauth.ApprovedEventType)
}
- return crdb.NewUpdateStatement(e,
+ return handler.NewUpdateStatement(e,
[]handler.Column{
handler.NewCol(DeviceAuthColumnState, domain.DeviceAuthStateApproved),
handler.NewCol(DeviceAuthColumnSubject, e.Subject),
@@ -134,7 +134,7 @@ func (p *deviceAuthProjection) reduceCanceled(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-eeS8d", "reduce.wrong.event.type %T != %s", event, deviceauth.CanceledEventType)
}
- return crdb.NewUpdateStatement(e,
+ return handler.NewUpdateStatement(e,
[]handler.Column{
handler.NewCol(DeviceAuthColumnState, e.Reason.State()),
handler.NewCol(DeviceAuthColumnChangeDate, e.CreationDate()),
@@ -152,7 +152,7 @@ func (p *deviceAuthProjection) reduceRemoved(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-AJi1u", "reduce.wrong.event.type %T != %s", event, deviceauth.RemovedEventType)
}
- return crdb.NewDeleteStatement(e,
+ return handler.NewDeleteStatement(e,
[]handler.Condition{
handler.NewCond(DeviceAuthColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(DeviceAuthColumnID, e.Aggregate().ID),
diff --git a/internal/query/projection/domain_policy.go b/internal/query/projection/domain_policy.go
index 97896edb98..b11fbf2607 100644
--- a/internal/query/projection/domain_policy.go
+++ b/internal/query/projection/domain_policy.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -30,42 +30,43 @@ const (
DomainPolicyOwnerRemovedCol = "owner_removed"
)
-type domainPolicyProjection struct {
- crdb.StatementHandler
+type domainPolicyProjection struct{}
+
+func newDomainPolicyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(domainPolicyProjection))
}
-func newDomainPolicyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *domainPolicyProjection {
- p := new(domainPolicyProjection)
- config.ProjectionName = DomainPolicyTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(DomainPolicyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(DomainPolicyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(DomainPolicyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(DomainPolicySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(DomainPolicyStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(DomainPolicyUserLoginMustBeDomainCol, crdb.ColumnTypeBool),
- crdb.NewColumn(DomainPolicyValidateOrgDomainsCol, crdb.ColumnTypeBool),
- crdb.NewColumn(DomainPolicySMTPSenderAddressMatchesInstanceDomainCol, crdb.ColumnTypeBool),
- crdb.NewColumn(DomainPolicyIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(DomainPolicyResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(DomainPolicyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(DomainPolicyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*domainPolicyProjection) Name() string {
+ return DomainPolicyTable
+}
+
+func (*domainPolicyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(DomainPolicyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(DomainPolicyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(DomainPolicyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(DomainPolicySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(DomainPolicyStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(DomainPolicyUserLoginMustBeDomainCol, handler.ColumnTypeBool),
+ handler.NewColumn(DomainPolicyValidateOrgDomainsCol, handler.ColumnTypeBool),
+ handler.NewColumn(DomainPolicySMTPSenderAddressMatchesInstanceDomainCol, handler.ColumnTypeBool),
+ handler.NewColumn(DomainPolicyIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(DomainPolicyResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(DomainPolicyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(DomainPolicyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(DomainPolicyInstanceIDCol, DomainPolicyIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{DomainPolicyOwnerRemovedCol})),
+ handler.NewPrimaryKey(DomainPolicyInstanceIDCol, DomainPolicyIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{DomainPolicyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *domainPolicyProjection) reducers() []handler.AggregateReducer {
+func (p *domainPolicyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.DomainPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -86,7 +87,7 @@ func (p *domainPolicyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.DomainPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -117,7 +118,7 @@ func (p *domainPolicyProjection) reduceAdded(event eventstore.Event) (*handler.S
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-CSE7A", "reduce.wrong.event.type %v", []eventstore.EventType{org.DomainPolicyAddedEventType, instance.DomainPolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(DomainPolicyCreationDateCol, policyEvent.CreationDate()),
@@ -157,7 +158,7 @@ func (p *domainPolicyProjection) reduceChanged(event eventstore.Event) (*handler
if policyEvent.SMTPSenderAddressMatchesInstanceDomain != nil {
cols = append(cols, handler.NewCol(DomainPolicySMTPSenderAddressMatchesInstanceDomainCol, *policyEvent.SMTPSenderAddressMatchesInstanceDomain))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -171,7 +172,7 @@ func (p *domainPolicyProjection) reduceRemoved(event eventstore.Event) (*handler
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-JAENd", "reduce.wrong.event.type %s", org.DomainPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(DomainPolicyIDCol, policyEvent.Aggregate().ID),
@@ -185,7 +186,7 @@ func (p *domainPolicyProjection) reduceOwnerRemoved(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-JYD2K", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(DomainPolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/domain_policy_test.go b/internal/query/projection/domain_policy_test.go
index 7aa64999e6..0df5f786d1 100644
--- a/internal/query/projection/domain_policy_test.go
+++ b/internal/query/projection/domain_policy_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,21 +24,21 @@ func TestDomainPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.DomainPolicyAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.DomainPolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": true,
"validateOrgDomains": true,
"smtpSenderAddressMatchesInstanceDomain": true
}`),
- ), org.DomainPolicyAddedEventMapper),
+ ), org.DomainPolicyAddedEventMapper),
},
reduce: (&domainPolicyProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -66,20 +65,20 @@ func TestDomainPolicyProjection_reduces(t *testing.T) {
name: "org reduceChanged",
reduce: (&domainPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.DomainPolicyChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.DomainPolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": true,
"validateOrgDomains": true,
"smtpSenderAddressMatchesInstanceDomain": true
}`),
- ), org.DomainPolicyChangedEventMapper),
+ ), org.DomainPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -102,16 +101,16 @@ func TestDomainPolicyProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (&domainPolicyProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.DomainPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.DomainPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.DomainPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.DomainPolicyRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -128,17 +127,17 @@ func TestDomainPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(DomainPolicyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -155,20 +154,20 @@ func TestDomainPolicyProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (&domainPolicyProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DomainPolicyAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DomainPolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": true,
"validateOrgDomains": true,
"smtpSenderAddressMatchesInstanceDomain": true
}`),
- ), instance.DomainPolicyAddedEventMapper),
+ ), instance.DomainPolicyAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -195,20 +194,20 @@ func TestDomainPolicyProjection_reduces(t *testing.T) {
name: "instance reduceChanged",
reduce: (&domainPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DomainPolicyChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DomainPolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": true,
"validateOrgDomains": true,
"smtpSenderAddressMatchesInstanceDomain": true
}`),
- ), instance.DomainPolicyChangedEventMapper),
+ ), instance.DomainPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -231,16 +230,16 @@ func TestDomainPolicyProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&domainPolicyProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/event_test.go b/internal/query/projection/event_test.go
index 40dd2234e1..4998629cf6 100644
--- a/internal/query/projection/event_test.go
+++ b/internal/query/projection/event_test.go
@@ -6,44 +6,41 @@ import (
"time"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/eventstore/repository"
)
func testEvent(
- eventType repository.EventType,
- aggregateType repository.AggregateType,
+ eventType eventstore.EventType,
+ aggregateType eventstore.AggregateType,
data []byte,
) *repository.Event {
return timedTestEvent(eventType, aggregateType, data, time.Now())
}
func toSystemEvent(event *repository.Event) *repository.Event {
- event.EditorService = "SYSTEM"
+ event.EditorUser = "SYSTEM"
return event
}
func timedTestEvent(
- eventType repository.EventType,
- aggregateType repository.AggregateType,
+ eventType eventstore.EventType,
+ aggregateType eventstore.AggregateType,
data []byte,
creationDate time.Time,
) *repository.Event {
return &repository.Event{
- Sequence: 15,
- PreviousAggregateSequence: 10,
- PreviousAggregateTypeSequence: 10,
- CreationDate: creationDate,
- Type: eventType,
- AggregateType: aggregateType,
- Data: data,
- Version: "v1",
- AggregateID: "agg-id",
- ResourceOwner: sql.NullString{String: "ro-id", Valid: true},
- InstanceID: "instance-id",
- ID: "event-id",
- EditorService: "editor-svc",
- EditorUser: "editor-user",
+ Seq: 15,
+ CreationDate: creationDate,
+ Typ: eventType,
+ AggregateType: aggregateType,
+ Data: data,
+ Version: "v1",
+ AggregateID: "agg-id",
+ ResourceOwner: sql.NullString{String: "ro-id", Valid: true},
+ InstanceID: "instance-id",
+ ID: "event-id",
+ EditorUser: "editor-user",
}
}
@@ -51,7 +48,7 @@ func baseEvent(*testing.T) eventstore.Event {
return &eventstore.BaseEvent{}
}
-func getEvent(event *repository.Event, mapper func(*repository.Event) (eventstore.Event, error)) func(t *testing.T) eventstore.Event {
+func getEvent(event *repository.Event, mapper func(eventstore.Event) (eventstore.Event, error)) func(t *testing.T) eventstore.Event {
return func(t *testing.T) eventstore.Event {
e, err := mapper(event)
if err != nil {
@@ -62,11 +59,10 @@ func getEvent(event *repository.Event, mapper func(*repository.Event) (eventstor
}
type wantReduce struct {
- aggregateType eventstore.AggregateType
- sequence uint64
- previousSequence uint64
- executer *testExecuter
- err func(error) bool
+ aggregateType eventstore.AggregateType
+ sequence uint64
+ executer *testExecuter
+ err func(error) bool
}
func assertReduce(t *testing.T, stmt *handler.Statement, err error, projection string, want wantReduce) {
@@ -82,10 +78,6 @@ func assertReduce(t *testing.T, stmt *handler.Statement, err error, projection s
t.Errorf("wrong aggregate type: want: %q got: %q", want.aggregateType, stmt.AggregateType)
}
- if stmt.PreviousSequence != want.previousSequence {
- t.Errorf("wrong previous sequence: want: %d got: %d", want.previousSequence, stmt.PreviousSequence)
- }
-
if stmt.Sequence != want.sequence {
t.Errorf("wrong sequence: want: %d got: %d", want.sequence, stmt.Sequence)
}
diff --git a/internal/query/projection/eventstore_mock_test.go b/internal/query/projection/eventstore_mock_test.go
new file mode 100644
index 0000000000..672b19ae3a
--- /dev/null
+++ b/internal/query/projection/eventstore_mock_test.go
@@ -0,0 +1,44 @@
+package projection
+
+import (
+ "context"
+ "time"
+
+ "github.com/zitadel/zitadel/internal/eventstore"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
+)
+
+var _ handler.EventStore = (*mockEventStore)(nil)
+
+type mockEventStore struct {
+ instanceIDsResponse [][]string
+ instanceIDCounter int
+ filterResponse [][]eventstore.Event
+ filterCounter int
+ pushResponse [][]eventstore.Event
+ pushCounter int
+}
+
+func newMockEventStore() *mockEventStore {
+ return new(mockEventStore)
+}
+
+func (m *mockEventStore) appendFilterResponse(events []eventstore.Event) *mockEventStore {
+ m.filterResponse = append(m.filterResponse, events)
+ return m
+}
+
+func (m *mockEventStore) InstanceIDs(ctx context.Context, _ time.Duration, _ bool, query *eventstore.SearchQueryBuilder) ([]string, error) {
+ m.instanceIDCounter++
+ return m.instanceIDsResponse[m.instanceIDCounter-1], nil
+}
+
+func (m *mockEventStore) Filter(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
+ m.filterCounter++
+ return m.filterResponse[m.filterCounter-1], nil
+}
+
+func (m *mockEventStore) Push(ctx context.Context, cmds ...eventstore.Command) ([]eventstore.Event, error) {
+ m.pushCounter++
+ return m.pushResponse[m.pushCounter-1], nil
+}
diff --git a/internal/query/projection/executer_test.go b/internal/query/projection/executer_test.go
index 565700b894..8dca87a383 100644
--- a/internal/query/projection/executer_test.go
+++ b/internal/query/projection/executer_test.go
@@ -25,6 +25,10 @@ type execution struct {
type anyArg struct{}
func (e *testExecuter) Exec(stmt string, args ...interface{}) (sql.Result, error) {
+ if stmt == "SAVEPOINT stmt_exec" || stmt == "RELEASE SAVEPOINT stmt_exec" {
+ return nil, nil
+ }
+
if e.execIdx >= len(e.executions) {
return nil, errors.ThrowInternal(nil, "PROJE-8TNoE", "too many executions")
}
diff --git a/internal/query/projection/flow.go b/internal/query/projection/flow.go
index 62c6cb1584..5375ba858d 100644
--- a/internal/query/projection/flow.go
+++ b/internal/query/projection/flow.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -24,39 +24,40 @@ const (
FlowOwnerRemovedCol = "owner_removed"
)
-type flowProjection struct {
- crdb.StatementHandler
+type flowProjection struct{}
+
+func newFlowProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(flowProjection))
}
-func newFlowProjection(ctx context.Context, config crdb.StatementHandlerConfig) *flowProjection {
- p := new(flowProjection)
- config.ProjectionName = FlowTriggerTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(FlowTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(FlowChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(FlowSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(FlowTriggerTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(FlowResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(FlowInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(FlowActionTriggerSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(FlowActionIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(FlowOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*flowProjection) Name() string {
+ return FlowTriggerTable
+}
+
+func (*flowProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(FlowTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(FlowChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(FlowSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(FlowTriggerTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(FlowResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(FlowInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(FlowActionTriggerSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(FlowActionIDCol, handler.ColumnTypeText),
+ handler.NewColumn(FlowOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(FlowInstanceIDCol, FlowTypeCol, FlowTriggerTypeCol, FlowResourceOwnerCol, FlowActionIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{FlowOwnerRemovedCol})),
+ handler.NewPrimaryKey(FlowInstanceIDCol, FlowTypeCol, FlowTriggerTypeCol, FlowResourceOwnerCol, FlowActionIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{FlowOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *flowProjection) reducers() []handler.AggregateReducer {
+func (p *flowProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.TriggerActionsSetEventType,
Reduce: p.reduceTriggerActionsSetEventType,
@@ -73,7 +74,7 @@ func (p *flowProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(FlowInstanceIDCol),
@@ -88,8 +89,8 @@ func (p *flowProjection) reduceTriggerActionsSetEventType(event eventstore.Event
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uYq4r", "reduce.wrong.event.type %s", org.TriggerActionsSetEventType)
}
- stmts := make([]func(reader eventstore.Event) crdb.Exec, len(e.ActionIDs)+1)
- stmts[0] = crdb.AddDeleteStatement(
+ stmts := make([]func(reader eventstore.Event) handler.Exec, len(e.ActionIDs)+1)
+ stmts[0] = handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(FlowTypeCol, e.FlowType),
handler.NewCond(FlowTriggerTypeCol, e.TriggerType),
@@ -98,7 +99,7 @@ func (p *flowProjection) reduceTriggerActionsSetEventType(event eventstore.Event
},
)
for i, id := range e.ActionIDs {
- stmts[i+1] = crdb.AddCreateStatement(
+ stmts[i+1] = handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(FlowResourceOwnerCol, e.Aggregate().ResourceOwner),
handler.NewCol(FlowInstanceIDCol, e.Aggregate().InstanceID),
@@ -111,7 +112,7 @@ func (p *flowProjection) reduceTriggerActionsSetEventType(event eventstore.Event
},
)
}
- return crdb.NewMultiStatement(e, stmts...), nil
+ return handler.NewMultiStatement(e, stmts...), nil
}
func (p *flowProjection) reduceFlowClearedEventType(event eventstore.Event) (*handler.Statement, error) {
@@ -119,7 +120,7 @@ func (p *flowProjection) reduceFlowClearedEventType(event eventstore.Event) (*ha
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uYq4r", "reduce.wrong.event.type %s", org.FlowClearedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(FlowTypeCol, e.FlowType),
@@ -135,7 +136,7 @@ func (p *flowProjection) reduceOwnerRemoved(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Yd7WC", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(FlowInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/flow_test.go b/internal/query/projection/flow_test.go
index 49b1b8d497..ca85c312c4 100644
--- a/internal/query/projection/flow_test.go
+++ b/internal/query/projection/flow_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,17 +24,17 @@ func TestFlowProjection_reduces(t *testing.T) {
{
name: "reduceTriggerActionsSetEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.TriggerActionsSetEventType),
- org.AggregateType,
- []byte(`{"flowType": 1, "triggerType": 1, "actionIDs": ["id1", "id2"]}`),
- ), org.TriggerActionsSetEventMapper),
+ event: getEvent(
+ testEvent(
+ org.TriggerActionsSetEventType,
+ org.AggregateType,
+ []byte(`{"flowType": 1, "triggerType": 1, "actionIDs": ["id1", "id2"]}`),
+ ), org.TriggerActionsSetEventMapper),
},
reduce: (&flowProjection{}).reduceTriggerActionsSetEventType,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -80,17 +79,17 @@ func TestFlowProjection_reduces(t *testing.T) {
{
name: "reduceFlowClearedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.FlowClearedEventType),
- org.AggregateType,
- []byte(`{"flowType": 1}`),
- ), org.FlowClearedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.FlowClearedEventType,
+ org.AggregateType,
+ []byte(`{"flowType": 1}`),
+ ), org.FlowClearedEventMapper),
},
reduce: (&flowProjection{}).reduceFlowClearedEventType,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -109,16 +108,16 @@ func TestFlowProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&flowProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -135,17 +134,17 @@ func TestFlowProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(FlowInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/idp.go b/internal/query/projection/idp.go
index a355c7adc1..db5cc4319a 100644
--- a/internal/query/projection/idp.go
+++ b/internal/query/projection/idp.go
@@ -7,8 +7,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -55,72 +55,73 @@ const (
JWTConfigEndpointCol = "endpoint"
)
-type idpProjection struct {
- crdb.StatementHandler
+type idpProjection struct{}
+
+func newIDPProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(idpProjection))
}
-func newIDPProjection(ctx context.Context, config crdb.StatementHandlerConfig) *idpProjection {
- p := new(idpProjection)
- config.ProjectionName = IDPTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(IDPIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(IDPResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(IDPNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPStylingTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(IDPOwnerTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(IDPAutoRegisterCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(IDPTypeCol, crdb.ColumnTypeEnum, crdb.Nullable()),
- crdb.NewColumn(IDPOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*idpProjection) Name() string {
+ return IDPTable
+}
+
+func (*idpProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(IDPIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(IDPResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(IDPNameCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPStylingTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(IDPOwnerTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(IDPAutoRegisterCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(IDPTypeCol, handler.ColumnTypeEnum, handler.Nullable()),
+ handler.NewColumn(IDPOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(IDPInstanceIDCol, IDPIDCol),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{IDPResourceOwnerCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{IDPOwnerRemovedCol})),
+ handler.NewPrimaryKey(IDPInstanceIDCol, IDPIDCol),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{IDPResourceOwnerCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{IDPOwnerRemovedCol})),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(OIDCConfigIDPIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCConfigInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCConfigClientIDCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(OIDCConfigClientSecretCol, crdb.ColumnTypeJSONB, crdb.Nullable()),
- crdb.NewColumn(OIDCConfigIssuerCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(OIDCConfigScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(OIDCConfigDisplayNameMappingCol, crdb.ColumnTypeEnum, crdb.Nullable()),
- crdb.NewColumn(OIDCConfigUsernameMappingCol, crdb.ColumnTypeEnum, crdb.Nullable()),
- crdb.NewColumn(OIDCConfigAuthorizationEndpointCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(OIDCConfigTokenEndpointCol, crdb.ColumnTypeText, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(OIDCConfigIDPIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OIDCConfigInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OIDCConfigClientIDCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(OIDCConfigClientSecretCol, handler.ColumnTypeJSONB, handler.Nullable()),
+ handler.NewColumn(OIDCConfigIssuerCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(OIDCConfigScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(OIDCConfigDisplayNameMappingCol, handler.ColumnTypeEnum, handler.Nullable()),
+ handler.NewColumn(OIDCConfigUsernameMappingCol, handler.ColumnTypeEnum, handler.Nullable()),
+ handler.NewColumn(OIDCConfigAuthorizationEndpointCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(OIDCConfigTokenEndpointCol, handler.ColumnTypeText, handler.Nullable()),
},
- crdb.NewPrimaryKey(OIDCConfigInstanceIDCol, OIDCConfigIDPIDCol),
+ handler.NewPrimaryKey(OIDCConfigInstanceIDCol, OIDCConfigIDPIDCol),
IDPOIDCSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(JWTConfigIDPIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(JWTConfigInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(JWTConfigIssuerCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(JWTConfigKeysEndpointCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(JWTConfigHeaderNameCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(JWTConfigEndpointCol, crdb.ColumnTypeText, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(JWTConfigIDPIDCol, handler.ColumnTypeText),
+ handler.NewColumn(JWTConfigInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(JWTConfigIssuerCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(JWTConfigKeysEndpointCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(JWTConfigHeaderNameCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(JWTConfigEndpointCol, handler.ColumnTypeText, handler.Nullable()),
},
- crdb.NewPrimaryKey(JWTConfigInstanceIDCol, JWTConfigIDPIDCol),
+ handler.NewPrimaryKey(JWTConfigInstanceIDCol, JWTConfigIDPIDCol),
IDPJWTSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *idpProjection) reducers() []handler.AggregateReducer {
+func (p *idpProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.IDPConfigAddedEventType,
Reduce: p.reduceIDPAdded,
@@ -165,7 +166,7 @@ func (p *idpProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.IDPConfigAddedEventType,
Reduce: p.reduceIDPAdded,
@@ -225,7 +226,7 @@ func (p *idpProjection) reduceIDPAdded(event eventstore.Event) (*handler.Stateme
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-fcUdQ", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigAddedEventType, instance.IDPConfigAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&idpEvent,
[]handler.Column{
handler.NewCol(IDPIDCol, idpEvent.ConfigID),
@@ -265,7 +266,7 @@ func (p *idpProjection) reduceIDPChanged(event eventstore.Event) (*handler.State
cols = append(cols, handler.NewCol(IDPAutoRegisterCol, *idpEvent.AutoRegister))
}
if len(cols) == 0 {
- return crdb.NewNoOpStatement(&idpEvent), nil
+ return handler.NewNoOpStatement(&idpEvent), nil
}
cols = append(cols,
@@ -273,7 +274,7 @@ func (p *idpProjection) reduceIDPChanged(event eventstore.Event) (*handler.State
handler.NewCol(IDPSequenceCol, idpEvent.Sequence()),
)
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&idpEvent,
cols,
[]handler.Condition{
@@ -294,7 +295,7 @@ func (p *idpProjection) reduceIDPDeactivated(event eventstore.Event) (*handler.S
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-94O5l", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigDeactivatedEventType, instance.IDPConfigDeactivatedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&idpEvent,
[]handler.Column{
handler.NewCol(IDPStateCol, domain.IDPConfigStateInactive),
@@ -319,7 +320,7 @@ func (p *idpProjection) reduceIDPReactivated(event eventstore.Event) (*handler.S
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-I8QyS", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigReactivatedEventType, instance.IDPConfigReactivatedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&idpEvent,
[]handler.Column{
handler.NewCol(IDPStateCol, domain.IDPConfigStateActive),
@@ -344,7 +345,7 @@ func (p *idpProjection) reduceIDPRemoved(event eventstore.Event) (*handler.State
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-B4zy8", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigRemovedEventType, instance.IDPConfigRemovedEventType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
&idpEvent,
[]handler.Condition{
handler.NewCond(IDPIDCol, idpEvent.ConfigID),
@@ -364,8 +365,8 @@ func (p *idpProjection) reduceOIDCConfigAdded(event eventstore.Event) (*handler.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-2FuAA", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPOIDCConfigAddedEventType, instance.IDPOIDCConfigAddedEventType})
}
- return crdb.NewMultiStatement(&idpEvent,
- crdb.AddUpdateStatement(
+ return handler.NewMultiStatement(&idpEvent,
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPSequenceCol, idpEvent.Sequence()),
@@ -376,20 +377,20 @@ func (p *idpProjection) reduceOIDCConfigAdded(event eventstore.Event) (*handler.
handler.NewCond(IDPInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(OIDCConfigIDPIDCol, idpEvent.IDPConfigID),
handler.NewCol(OIDCConfigInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(OIDCConfigClientIDCol, idpEvent.ClientID),
handler.NewCol(OIDCConfigClientSecretCol, idpEvent.ClientSecret),
handler.NewCol(OIDCConfigIssuerCol, idpEvent.Issuer),
- handler.NewCol(OIDCConfigScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(OIDCConfigScopesCol, database.TextArray[string](idpEvent.Scopes)),
handler.NewCol(OIDCConfigDisplayNameMappingCol, idpEvent.IDPDisplayNameMapping),
handler.NewCol(OIDCConfigUsernameMappingCol, idpEvent.UserNameMapping),
handler.NewCol(OIDCConfigAuthorizationEndpointCol, idpEvent.AuthorizationEndpoint),
handler.NewCol(OIDCConfigTokenEndpointCol, idpEvent.TokenEndpoint),
},
- crdb.WithTableSuffix(IDPOIDCSuffix),
+ handler.WithTableSuffix(IDPOIDCSuffix),
),
), nil
}
@@ -423,7 +424,7 @@ func (p *idpProjection) reduceOIDCConfigChanged(event eventstore.Event) (*handle
cols = append(cols, handler.NewCol(OIDCConfigTokenEndpointCol, *idpEvent.TokenEndpoint))
}
if idpEvent.Scopes != nil {
- cols = append(cols, handler.NewCol(OIDCConfigScopesCol, database.StringArray(idpEvent.Scopes)))
+ cols = append(cols, handler.NewCol(OIDCConfigScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
if idpEvent.IDPDisplayNameMapping != nil {
cols = append(cols, handler.NewCol(OIDCConfigDisplayNameMappingCol, *idpEvent.IDPDisplayNameMapping))
@@ -433,11 +434,11 @@ func (p *idpProjection) reduceOIDCConfigChanged(event eventstore.Event) (*handle
}
if len(cols) == 0 {
- return crdb.NewNoOpStatement(&idpEvent), nil
+ return handler.NewNoOpStatement(&idpEvent), nil
}
- return crdb.NewMultiStatement(&idpEvent,
- crdb.AddUpdateStatement(
+ return handler.NewMultiStatement(&idpEvent,
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPSequenceCol, idpEvent.Sequence()),
@@ -447,13 +448,13 @@ func (p *idpProjection) reduceOIDCConfigChanged(event eventstore.Event) (*handle
handler.NewCond(IDPInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
cols,
[]handler.Condition{
handler.NewCond(OIDCConfigIDPIDCol, idpEvent.IDPConfigID),
handler.NewCond(OIDCConfigInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPOIDCSuffix),
+ handler.WithTableSuffix(IDPOIDCSuffix),
),
), nil
}
@@ -469,8 +470,8 @@ func (p *idpProjection) reduceJWTConfigAdded(event eventstore.Event) (*handler.S
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-qvPdb", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPJWTConfigAddedEventType, instance.IDPJWTConfigAddedEventType})
}
- return crdb.NewMultiStatement(&idpEvent,
- crdb.AddUpdateStatement(
+ return handler.NewMultiStatement(&idpEvent,
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPSequenceCol, idpEvent.Sequence()),
@@ -482,7 +483,7 @@ func (p *idpProjection) reduceJWTConfigAdded(event eventstore.Event) (*handler.S
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(JWTConfigIDPIDCol, idpEvent.IDPConfigID),
handler.NewCol(JWTConfigInstanceIDCol, idpEvent.Aggregate().InstanceID),
@@ -491,7 +492,7 @@ func (p *idpProjection) reduceJWTConfigAdded(event eventstore.Event) (*handler.S
handler.NewCol(JWTConfigKeysEndpointCol, idpEvent.KeysEndpoint),
handler.NewCol(JWTConfigHeaderNameCol, idpEvent.HeaderName),
},
- crdb.WithTableSuffix(IDPJWTSuffix),
+ handler.WithTableSuffix(IDPJWTSuffix),
),
), nil
}
@@ -523,11 +524,11 @@ func (p *idpProjection) reduceJWTConfigChanged(event eventstore.Event) (*handler
}
if len(cols) == 0 {
- return crdb.NewNoOpStatement(&idpEvent), nil
+ return handler.NewNoOpStatement(&idpEvent), nil
}
- return crdb.NewMultiStatement(&idpEvent,
- crdb.AddUpdateStatement(
+ return handler.NewMultiStatement(&idpEvent,
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPSequenceCol, idpEvent.Sequence()),
@@ -537,13 +538,13 @@ func (p *idpProjection) reduceJWTConfigChanged(event eventstore.Event) (*handler
handler.NewCond(IDPInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
cols,
[]handler.Condition{
handler.NewCond(JWTConfigIDPIDCol, idpEvent.IDPConfigID),
handler.NewCond(JWTConfigInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPJWTSuffix),
+ handler.WithTableSuffix(IDPJWTSuffix),
),
), nil
}
@@ -554,7 +555,7 @@ func (p *idpProjection) reduceOwnerRemoved(event eventstore.Event) (*handler.Sta
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-YsbQC", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(IDPInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/idp_login_policy_link.go b/internal/query/projection/idp_login_policy_link.go
index 34df691a46..7fcdc57804 100644
--- a/internal/query/projection/idp_login_policy_link.go
+++ b/internal/query/projection/idp_login_policy_link.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -27,40 +27,41 @@ const (
IDPLoginPolicyLinkOwnerRemovedCol = "owner_removed"
)
-type idpLoginPolicyLinkProjection struct {
- crdb.StatementHandler
+type idpLoginPolicyLinkProjection struct{}
+
+func newIDPLoginPolicyLinkProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(idpLoginPolicyLinkProjection))
}
-func newIDPLoginPolicyLinkProjection(ctx context.Context, config crdb.StatementHandlerConfig) *idpLoginPolicyLinkProjection {
- p := new(idpLoginPolicyLinkProjection)
- config.ProjectionName = IDPLoginPolicyLinkTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(IDPLoginPolicyLinkIDPIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPLoginPolicyLinkAggregateIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPLoginPolicyLinkCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPLoginPolicyLinkChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPLoginPolicyLinkSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(IDPLoginPolicyLinkResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPLoginPolicyLinkInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPLoginPolicyLinkProviderTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(IDPLoginPolicyLinkOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*idpLoginPolicyLinkProjection) Name() string {
+ return IDPLoginPolicyLinkTable
+}
+
+func (*idpLoginPolicyLinkProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(IDPLoginPolicyLinkIDPIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPLoginPolicyLinkAggregateIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPLoginPolicyLinkCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPLoginPolicyLinkChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPLoginPolicyLinkSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(IDPLoginPolicyLinkResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPLoginPolicyLinkInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPLoginPolicyLinkProviderTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(IDPLoginPolicyLinkOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(IDPLoginPolicyLinkInstanceIDCol, IDPLoginPolicyLinkAggregateIDCol, IDPLoginPolicyLinkIDPIDCol),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{IDPLoginPolicyLinkResourceOwnerCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{IDPLoginPolicyLinkOwnerRemovedCol})),
+ handler.NewPrimaryKey(IDPLoginPolicyLinkInstanceIDCol, IDPLoginPolicyLinkAggregateIDCol, IDPLoginPolicyLinkIDPIDCol),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{IDPLoginPolicyLinkResourceOwnerCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{IDPLoginPolicyLinkOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *idpLoginPolicyLinkProjection) reducers() []handler.AggregateReducer {
+func (p *idpLoginPolicyLinkProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.LoginPolicyIDPProviderAddedEventType,
Reduce: p.reduceAdded,
@@ -93,7 +94,7 @@ func (p *idpLoginPolicyLinkProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.LoginPolicyIDPProviderAddedEventType,
Reduce: p.reduceAdded,
@@ -140,7 +141,7 @@ func (p *idpLoginPolicyLinkProjection) reduceAdded(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Nlp55", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicyIDPProviderAddedEventType, instance.LoginPolicyIDPProviderAddedEventType})
}
- return crdb.NewCreateStatement(&idp,
+ return handler.NewCreateStatement(&idp,
[]handler.Column{
handler.NewCol(IDPLoginPolicyLinkIDPIDCol, idp.IDPConfigID),
handler.NewCol(IDPLoginPolicyLinkAggregateIDCol, idp.Aggregate().ID),
@@ -166,7 +167,7 @@ func (p *idpLoginPolicyLinkProjection) reduceRemoved(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-tUMYY", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicyIDPProviderRemovedEventType, instance.LoginPolicyIDPProviderRemovedEventType})
}
- return crdb.NewDeleteStatement(&idp,
+ return handler.NewDeleteStatement(&idp,
[]handler.Condition{
handler.NewCond(IDPLoginPolicyLinkIDPIDCol, idp.IDPConfigID),
handler.NewCond(IDPLoginPolicyLinkAggregateIDCol, idp.Aggregate().ID),
@@ -187,7 +188,7 @@ func (p *idpLoginPolicyLinkProjection) reduceCascadeRemoved(event eventstore.Eve
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-iCKSj", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicyIDPProviderCascadeRemovedEventType, instance.LoginPolicyIDPProviderCascadeRemovedEventType})
}
- return crdb.NewDeleteStatement(&idp,
+ return handler.NewDeleteStatement(&idp,
[]handler.Condition{
handler.NewCond(IDPLoginPolicyLinkIDPIDCol, idp.IDPConfigID),
handler.NewCond(IDPLoginPolicyLinkAggregateIDCol, idp.Aggregate().ID),
@@ -215,7 +216,7 @@ func (p *idpLoginPolicyLinkProjection) reduceIDPConfigRemoved(event eventstore.E
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-u6tze", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigRemovedEventType, instance.IDPConfigRemovedEventType})
}
- return crdb.NewDeleteStatement(event, conditions), nil
+ return handler.NewDeleteStatement(event, conditions), nil
}
func (p *idpLoginPolicyLinkProjection) reduceIDPRemoved(event eventstore.Event) (*handler.Statement, error) {
@@ -237,7 +238,7 @@ func (p *idpLoginPolicyLinkProjection) reduceIDPRemoved(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SFED3", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPRemovedEventType, instance.IDPRemovedEventType})
}
- return crdb.NewDeleteStatement(event, conditions), nil
+ return handler.NewDeleteStatement(event, conditions), nil
}
func (p *idpLoginPolicyLinkProjection) reducePolicyRemoved(event eventstore.Event) (*handler.Statement, error) {
@@ -245,7 +246,7 @@ func (p *idpLoginPolicyLinkProjection) reducePolicyRemoved(event eventstore.Even
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SF3dg", "reduce.wrong.event.type %s", org.LoginPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(e,
+ return handler.NewDeleteStatement(e,
[]handler.Condition{
handler.NewCond(IDPLoginPolicyLinkAggregateIDCol, e.Aggregate().ID),
handler.NewCond(IDPLoginPolicyLinkInstanceIDCol, event.Aggregate().InstanceID),
@@ -259,7 +260,7 @@ func (p *idpLoginPolicyLinkProjection) reduceOwnerRemoved(event eventstore.Event
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-YbhOv", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(IDPLoginPolicyLinkInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/idp_login_policy_link_test.go b/internal/query/projection/idp_login_policy_link_test.go
index 569f3746bf..4f58ec1fae 100644
--- a/internal/query/projection/idp_login_policy_link_test.go
+++ b/internal/query/projection/idp_login_policy_link_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,20 +24,20 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "iam reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicyIDPProviderAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicyIDPProviderAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"idpProviderType": 1
}`),
- ), instance.IdentityProviderAddedEventMapper),
+ ), instance.IdentityProviderAddedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -61,20 +60,20 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "iam reduceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicyIDPProviderRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicyIDPProviderRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"idpProviderType": 1
}`),
- ), instance.IdentityProviderRemovedEventMapper),
+ ), instance.IdentityProviderRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -92,20 +91,20 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "iam reduceCascadeRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicyIDPProviderCascadeRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicyIDPProviderCascadeRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"idpProviderType": 1
}`),
- ), instance.IdentityProviderCascadeRemovedEventMapper),
+ ), instance.IdentityProviderCascadeRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceCascadeRemoved,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -123,20 +122,20 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyIDPProviderAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyIDPProviderAddedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"idpProviderType": 1
}`),
- ), org.IdentityProviderAddedEventMapper),
+ ), org.IdentityProviderAddedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -159,20 +158,20 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyIDPProviderRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyIDPProviderRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"idpProviderType": 1
}`),
- ), org.IdentityProviderRemovedEventMapper),
+ ), org.IdentityProviderRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -190,17 +189,17 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(IDPUserLinkInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -216,20 +215,20 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "org reduceCascadeRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyIDPProviderCascadeRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyIDPProviderCascadeRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"idpProviderType": 1
}`),
- ), org.IdentityProviderCascadeRemovedEventMapper),
+ ), org.IdentityProviderCascadeRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceCascadeRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -247,17 +246,17 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "reducePolicyRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.LoginPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.LoginPolicyRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reducePolicyRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -274,19 +273,19 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "org IDPConfigRemovedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), org.IDPConfigRemovedEventMapper),
+ ), org.IDPConfigRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceIDPConfigRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -304,19 +303,19 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "iam IDPConfigRemovedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), instance.IDPConfigRemovedEventMapper),
+ ), instance.IDPConfigRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceIDPConfigRemoved,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -333,19 +332,19 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "org IDPRemovedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "id"
}`),
- ), org.IDPRemovedEventMapper),
+ ), org.IDPRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceIDPRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -363,19 +362,19 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
{
name: "iam IDPRemovedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "id"
}`),
- ), instance.IDPRemovedEventMapper),
+ ), instance.IDPRemovedEventMapper),
},
reduce: (&idpLoginPolicyLinkProjection{}).reduceIDPRemoved,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -393,16 +392,16 @@ func TestIDPLoginPolicyLinkProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&idpLoginPolicyLinkProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/idp_template.go b/internal/query/projection/idp_template.go
index 715b853c57..181fecefb6 100644
--- a/internal/query/projection/idp_template.go
+++ b/internal/query/projection/idp_template.go
@@ -8,8 +8,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/idp"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
"github.com/zitadel/zitadel/internal/repository/instance"
@@ -169,214 +169,215 @@ const (
SAMLWithSignedRequestCol = "with_signed_request"
)
-type idpTemplateProjection struct {
- crdb.StatementHandler
+type idpTemplateProjection struct{}
+
+func newIDPTemplateProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(idpTemplateProjection))
}
-func newIDPTemplateProjection(ctx context.Context, config crdb.StatementHandlerConfig) *idpTemplateProjection {
- p := new(idpTemplateProjection)
- config.ProjectionName = IDPTemplateTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(IDPTemplateIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPTemplateCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPTemplateChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPTemplateSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(IDPTemplateResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPTemplateInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPTemplateStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(IDPTemplateNameCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(IDPTemplateOwnerTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(IDPTemplateTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(IDPTemplateOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(IDPTemplateIsCreationAllowedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(IDPTemplateIsLinkingAllowedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(IDPTemplateIsAutoCreationCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(IDPTemplateIsAutoUpdateCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*idpTemplateProjection) Name() string {
+ return IDPTemplateTable
+}
+
+func (*idpTemplateProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(IDPTemplateIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPTemplateCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPTemplateChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPTemplateSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(IDPTemplateResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPTemplateInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPTemplateStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(IDPTemplateNameCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(IDPTemplateOwnerTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(IDPTemplateTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(IDPTemplateOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(IDPTemplateIsCreationAllowedCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(IDPTemplateIsLinkingAllowedCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(IDPTemplateIsAutoCreationCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(IDPTemplateIsAutoUpdateCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(IDPTemplateInstanceIDCol, IDPTemplateIDCol),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{IDPTemplateResourceOwnerCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{IDPTemplateOwnerRemovedCol})),
+ handler.NewPrimaryKey(IDPTemplateInstanceIDCol, IDPTemplateIDCol),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{IDPTemplateResourceOwnerCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{IDPTemplateOwnerRemovedCol})),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(OAuthIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OAuthInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OAuthClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OAuthClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(OAuthAuthorizationEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(OAuthTokenEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(OAuthUserEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(OAuthScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(OAuthIDAttributeCol, crdb.ColumnTypeText),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(OAuthIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OAuthInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OAuthClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OAuthClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(OAuthAuthorizationEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(OAuthTokenEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(OAuthUserEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(OAuthScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(OAuthIDAttributeCol, handler.ColumnTypeText),
},
- crdb.NewPrimaryKey(OAuthInstanceIDCol, OAuthIDCol),
+ handler.NewPrimaryKey(OAuthInstanceIDCol, OAuthIDCol),
IDPTemplateOAuthSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(OIDCIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCIssuerCol, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(OIDCScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(OIDCIDTokenMappingCol, crdb.ColumnTypeBool, crdb.Default(false)),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(OIDCIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OIDCInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OIDCIssuerCol, handler.ColumnTypeText),
+ handler.NewColumn(OIDCClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OIDCClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(OIDCScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(OIDCIDTokenMappingCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(OIDCInstanceIDCol, OIDCIDCol),
+ handler.NewPrimaryKey(OIDCInstanceIDCol, OIDCIDCol),
IDPTemplateOIDCSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(JWTIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(JWTInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(JWTIssuerCol, crdb.ColumnTypeText),
- crdb.NewColumn(JWTEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(JWTKeysEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(JWTHeaderNameCol, crdb.ColumnTypeText, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(JWTIDCol, handler.ColumnTypeText),
+ handler.NewColumn(JWTInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(JWTIssuerCol, handler.ColumnTypeText),
+ handler.NewColumn(JWTEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(JWTKeysEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(JWTHeaderNameCol, handler.ColumnTypeText, handler.Nullable()),
},
- crdb.NewPrimaryKey(JWTInstanceIDCol, JWTIDCol),
+ handler.NewPrimaryKey(JWTInstanceIDCol, JWTIDCol),
IDPTemplateJWTSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(AzureADIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AzureADInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AzureADClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AzureADClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(AzureADScopesCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(AzureADTenantCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(AzureADIsEmailVerified, crdb.ColumnTypeBool, crdb.Default(false)),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(AzureADIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AzureADInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AzureADClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AzureADClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(AzureADScopesCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(AzureADTenantCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(AzureADIsEmailVerified, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(AzureADInstanceIDCol, AzureADIDCol),
+ handler.NewPrimaryKey(AzureADInstanceIDCol, AzureADIDCol),
IDPTemplateAzureADSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(GitHubIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(GitHubScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(GitHubIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(GitHubScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(GitHubInstanceIDCol, GitHubIDCol),
+ handler.NewPrimaryKey(GitHubInstanceIDCol, GitHubIDCol),
IDPTemplateGitHubSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(GitHubEnterpriseIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubEnterpriseInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubEnterpriseClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubEnterpriseClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(GitHubEnterpriseAuthorizationEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubEnterpriseTokenEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubEnterpriseUserEndpointCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitHubEnterpriseScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(GitHubEnterpriseIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubEnterpriseInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubEnterpriseClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubEnterpriseClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(GitHubEnterpriseAuthorizationEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubEnterpriseTokenEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubEnterpriseUserEndpointCol, handler.ColumnTypeText),
+ handler.NewColumn(GitHubEnterpriseScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(GitHubEnterpriseInstanceIDCol, GitHubEnterpriseIDCol),
+ handler.NewPrimaryKey(GitHubEnterpriseInstanceIDCol, GitHubEnterpriseIDCol),
IDPTemplateGitHubEnterpriseSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(GitLabIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitLabInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitLabClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitLabClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(GitLabScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(GitLabIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitLabInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitLabClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitLabClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(GitLabScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(GitLabInstanceIDCol, GitLabIDCol),
+ handler.NewPrimaryKey(GitLabInstanceIDCol, GitLabIDCol),
IDPTemplateGitLabSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(GitLabSelfHostedIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitLabSelfHostedInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitLabSelfHostedIssuerCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitLabSelfHostedClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GitLabSelfHostedClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(GitLabSelfHostedScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(GitLabSelfHostedIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitLabSelfHostedInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitLabSelfHostedIssuerCol, handler.ColumnTypeText),
+ handler.NewColumn(GitLabSelfHostedClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GitLabSelfHostedClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(GitLabSelfHostedScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(GitLabSelfHostedInstanceIDCol, GitLabSelfHostedIDCol),
+ handler.NewPrimaryKey(GitLabSelfHostedInstanceIDCol, GitLabSelfHostedIDCol),
IDPTemplateGitLabSelfHostedSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(GoogleIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GoogleInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GoogleClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(GoogleClientSecretCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(GoogleScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(GoogleIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GoogleInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GoogleClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(GoogleClientSecretCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(GoogleScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(GoogleInstanceIDCol, GoogleIDCol),
+ handler.NewPrimaryKey(GoogleInstanceIDCol, GoogleIDCol),
IDPTemplateGoogleSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(LDAPIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LDAPInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LDAPServersCol, crdb.ColumnTypeTextArray),
- crdb.NewColumn(LDAPStartTLSCol, crdb.ColumnTypeBool),
- crdb.NewColumn(LDAPBaseDNCol, crdb.ColumnTypeText),
- crdb.NewColumn(LDAPBindDNCol, crdb.ColumnTypeText),
- crdb.NewColumn(LDAPBindPasswordCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(LDAPUserBaseCol, crdb.ColumnTypeText),
- crdb.NewColumn(LDAPUserObjectClassesCol, crdb.ColumnTypeTextArray),
- crdb.NewColumn(LDAPUserFiltersCol, crdb.ColumnTypeTextArray),
- crdb.NewColumn(LDAPTimeoutCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(LDAPIDAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPFirstNameAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPLastNameAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPDisplayNameAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPNickNameAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPPreferredUsernameAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPEmailAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPEmailVerifiedAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPPhoneAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPPhoneVerifiedAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPPreferredLanguageAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPAvatarURLAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LDAPProfileAttributeCol, crdb.ColumnTypeText, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(LDAPIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LDAPInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LDAPServersCol, handler.ColumnTypeTextArray),
+ handler.NewColumn(LDAPStartTLSCol, handler.ColumnTypeBool),
+ handler.NewColumn(LDAPBaseDNCol, handler.ColumnTypeText),
+ handler.NewColumn(LDAPBindDNCol, handler.ColumnTypeText),
+ handler.NewColumn(LDAPBindPasswordCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(LDAPUserBaseCol, handler.ColumnTypeText),
+ handler.NewColumn(LDAPUserObjectClassesCol, handler.ColumnTypeTextArray),
+ handler.NewColumn(LDAPUserFiltersCol, handler.ColumnTypeTextArray),
+ handler.NewColumn(LDAPTimeoutCol, handler.ColumnTypeInt64),
+ handler.NewColumn(LDAPIDAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPFirstNameAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPLastNameAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPDisplayNameAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPNickNameAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPPreferredUsernameAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPEmailAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPEmailVerifiedAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPPhoneAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPPhoneVerifiedAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPPreferredLanguageAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPAvatarURLAttributeCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LDAPProfileAttributeCol, handler.ColumnTypeText, handler.Nullable()),
},
- crdb.NewPrimaryKey(LDAPInstanceIDCol, LDAPIDCol),
+ handler.NewPrimaryKey(LDAPInstanceIDCol, LDAPIDCol),
IDPTemplateLDAPSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(AppleIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AppleInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AppleClientIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AppleTeamIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AppleKeyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(ApplePrivateKeyCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(AppleScopesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(AppleIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AppleInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AppleClientIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AppleTeamIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AppleKeyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(ApplePrivateKeyCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(AppleScopesCol, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(AppleInstanceIDCol, AppleIDCol),
+ handler.NewPrimaryKey(AppleInstanceIDCol, AppleIDCol),
IDPTemplateAppleSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(SAMLIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(SAMLInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(SAMLMetadataCol, crdb.ColumnTypeBytes),
- crdb.NewColumn(SAMLKeyCol, crdb.ColumnTypeJSONB),
- crdb.NewColumn(SAMLCertificateCol, crdb.ColumnTypeBytes),
- crdb.NewColumn(SAMLBindingCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(SAMLWithSignedRequestCol, crdb.ColumnTypeBool, crdb.Nullable()),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(SAMLIDCol, handler.ColumnTypeText),
+ handler.NewColumn(SAMLInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(SAMLMetadataCol, handler.ColumnTypeBytes),
+ handler.NewColumn(SAMLKeyCol, handler.ColumnTypeJSONB),
+ handler.NewColumn(SAMLCertificateCol, handler.ColumnTypeBytes),
+ handler.NewColumn(SAMLBindingCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(SAMLWithSignedRequestCol, handler.ColumnTypeBool, handler.Nullable()),
},
- crdb.NewPrimaryKey(SAMLInstanceIDCol, SAMLIDCol),
+ handler.NewPrimaryKey(SAMLInstanceIDCol, SAMLIDCol),
IDPTemplateSAMLSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *idpTemplateProjection) reducers() []handler.AggregateReducer {
+func (p *idpTemplateProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.OAuthIDPAddedEventType,
Reduce: p.reduceOAuthIDPAdded,
@@ -521,7 +522,7 @@ func (p *idpTemplateProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OAuthIDPAddedEventType,
Reduce: p.reduceOAuthIDPAdded,
@@ -681,9 +682,9 @@ func (p *idpTemplateProjection) reduceOAuthIDPAdded(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ap9ihb", "reduce.wrong.event.type %v", []eventstore.EventType{org.OAuthIDPAddedEventType, instance.OAuthIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -701,7 +702,7 @@ func (p *idpTemplateProjection) reduceOAuthIDPAdded(event eventstore.Event) (*ha
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(OAuthIDCol, idpEvent.ID),
handler.NewCol(OAuthInstanceIDCol, idpEvent.Aggregate().InstanceID),
@@ -710,10 +711,10 @@ func (p *idpTemplateProjection) reduceOAuthIDPAdded(event eventstore.Event) (*ha
handler.NewCol(OAuthAuthorizationEndpointCol, idpEvent.AuthorizationEndpoint),
handler.NewCol(OAuthTokenEndpointCol, idpEvent.TokenEndpoint),
handler.NewCol(OAuthUserEndpointCol, idpEvent.UserEndpoint),
- handler.NewCol(OAuthScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(OAuthScopesCol, database.TextArray[string](idpEvent.Scopes)),
handler.NewCol(OAuthIDAttributeCol, idpEvent.IDAttribute),
},
- crdb.WithTableSuffix(IDPTemplateOAuthSuffix),
+ handler.WithTableSuffix(IDPTemplateOAuthSuffix),
),
), nil
}
@@ -729,9 +730,9 @@ func (p *idpTemplateProjection) reduceOAuthIDPChanged(event eventstore.Event) (*
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.OAuthIDPChangedEventType, instance.OAuthIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -742,18 +743,18 @@ func (p *idpTemplateProjection) reduceOAuthIDPChanged(event eventstore.Event) (*
oauthCols := reduceOAuthIDPChangedColumns(idpEvent)
if len(oauthCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
oauthCols,
[]handler.Condition{
handler.NewCond(OAuthIDCol, idpEvent.ID),
handler.NewCond(OAuthInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateOAuthSuffix),
+ handler.WithTableSuffix(IDPTemplateOAuthSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -773,9 +774,9 @@ func (p *idpTemplateProjection) reduceOIDCIDPAdded(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-9s02m1", "reduce.wrong.event.type %v", []eventstore.EventType{org.OIDCIDPAddedEventType, instance.OIDCIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -793,17 +794,17 @@ func (p *idpTemplateProjection) reduceOIDCIDPAdded(event eventstore.Event) (*han
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(OIDCIDCol, idpEvent.ID),
handler.NewCol(OIDCInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(OIDCIssuerCol, idpEvent.Issuer),
handler.NewCol(OIDCClientIDCol, idpEvent.ClientID),
handler.NewCol(OIDCClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(OIDCScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(OIDCScopesCol, database.TextArray[string](idpEvent.Scopes)),
handler.NewCol(OIDCIDTokenMappingCol, idpEvent.IsIDTokenMapping),
},
- crdb.WithTableSuffix(IDPTemplateOIDCSuffix),
+ handler.WithTableSuffix(IDPTemplateOIDCSuffix),
),
), nil
}
@@ -819,9 +820,9 @@ func (p *idpTemplateProjection) reduceOIDCIDPChanged(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.OIDCIDPChangedEventType, instance.OIDCIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -832,18 +833,18 @@ func (p *idpTemplateProjection) reduceOIDCIDPChanged(event eventstore.Event) (*h
oidcCols := reduceOIDCIDPChangedColumns(idpEvent)
if len(oidcCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
oidcCols,
[]handler.Condition{
handler.NewCond(OIDCIDCol, idpEvent.ID),
handler.NewCond(OIDCInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateOIDCSuffix),
+ handler.WithTableSuffix(IDPTemplateOIDCSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -860,9 +861,9 @@ func (p *idpTemplateProjection) reduceOIDCIDPMigratedAzureAD(event eventstore.Ev
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.OIDCIDPMigratedAzureADEventType, instance.OIDCIDPMigratedAzureADEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPTemplateSequenceCol, idpEvent.Sequence()),
@@ -878,24 +879,24 @@ func (p *idpTemplateProjection) reduceOIDCIDPMigratedAzureAD(event eventstore.Ev
handler.NewCond(IDPTemplateInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(OIDCIDCol, idpEvent.ID),
handler.NewCond(OIDCInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateOIDCSuffix),
+ handler.WithTableSuffix(IDPTemplateOIDCSuffix),
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(AzureADIDCol, idpEvent.ID),
handler.NewCol(AzureADInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(AzureADClientIDCol, idpEvent.ClientID),
handler.NewCol(AzureADClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(AzureADScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(AzureADScopesCol, database.TextArray[string](idpEvent.Scopes)),
handler.NewCol(AzureADTenantCol, idpEvent.Tenant),
handler.NewCol(AzureADIsEmailVerified, idpEvent.IsEmailVerified),
},
- crdb.WithTableSuffix(IDPTemplateAzureADSuffix),
+ handler.WithTableSuffix(IDPTemplateAzureADSuffix),
),
), nil
}
@@ -911,9 +912,9 @@ func (p *idpTemplateProjection) reduceOIDCIDPMigratedGoogle(event eventstore.Eve
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.OIDCIDPMigratedGoogleEventType, instance.OIDCIDPMigratedGoogleEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPTemplateSequenceCol, idpEvent.Sequence()),
@@ -929,22 +930,22 @@ func (p *idpTemplateProjection) reduceOIDCIDPMigratedGoogle(event eventstore.Eve
handler.NewCond(IDPTemplateInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(OIDCIDCol, idpEvent.ID),
handler.NewCond(OIDCInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateOIDCSuffix),
+ handler.WithTableSuffix(IDPTemplateOIDCSuffix),
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(GoogleIDCol, idpEvent.ID),
handler.NewCol(GoogleInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(GoogleClientIDCol, idpEvent.ClientID),
handler.NewCol(GoogleClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(GoogleScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(GoogleScopesCol, database.TextArray[string](idpEvent.Scopes)),
},
- crdb.WithTableSuffix(IDPTemplateGoogleSuffix),
+ handler.WithTableSuffix(IDPTemplateGoogleSuffix),
),
), nil
}
@@ -963,9 +964,9 @@ func (p *idpTemplateProjection) reduceJWTIDPAdded(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-xopi2s", "reduce.wrong.event.type %v", []eventstore.EventType{org.JWTIDPAddedEventType, instance.JWTIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -983,7 +984,7 @@ func (p *idpTemplateProjection) reduceJWTIDPAdded(event eventstore.Event) (*hand
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(JWTIDCol, idpEvent.ID),
handler.NewCol(JWTInstanceIDCol, idpEvent.Aggregate().InstanceID),
@@ -992,7 +993,7 @@ func (p *idpTemplateProjection) reduceJWTIDPAdded(event eventstore.Event) (*hand
handler.NewCol(JWTKeysEndpointCol, idpEvent.KeysEndpoint),
handler.NewCol(JWTHeaderNameCol, idpEvent.HeaderName),
},
- crdb.WithTableSuffix(IDPTemplateJWTSuffix),
+ handler.WithTableSuffix(IDPTemplateJWTSuffix),
),
), nil
}
@@ -1008,9 +1009,9 @@ func (p *idpTemplateProjection) reduceJWTIDPChanged(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.JWTIDPChangedEventType, instance.JWTIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1021,18 +1022,18 @@ func (p *idpTemplateProjection) reduceJWTIDPChanged(event eventstore.Event) (*ha
jwtCols := reduceJWTIDPChangedColumns(idpEvent)
if len(jwtCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
jwtCols,
[]handler.Condition{
handler.NewCond(JWTIDCol, idpEvent.ID),
handler.NewCond(JWTInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateJWTSuffix),
+ handler.WithTableSuffix(IDPTemplateJWTSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1052,7 +1053,7 @@ func (p *idpTemplateProjection) reduceOldConfigAdded(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ADfeg", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigAddedEventType, instance.IDPConfigAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
event,
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ConfigID),
@@ -1096,7 +1097,7 @@ func (p *idpTemplateProjection) reduceOldConfigChanged(event eventstore.Event) (
handler.NewCol(IDPTemplateSequenceCol, idpEvent.Sequence()),
)
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
cols,
[]handler.Condition{
@@ -1117,9 +1118,9 @@ func (p *idpTemplateProjection) reduceOldOIDCConfigAdded(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ASFdq2", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPOIDCConfigAddedEventType, instance.IDPOIDCConfigAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPTemplateSequenceCol, idpEvent.Sequence()),
@@ -1130,17 +1131,17 @@ func (p *idpTemplateProjection) reduceOldOIDCConfigAdded(event eventstore.Event)
handler.NewCond(IDPTemplateInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(OIDCIDCol, idpEvent.IDPConfigID),
handler.NewCol(OIDCInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(OIDCIssuerCol, idpEvent.Issuer),
handler.NewCol(OIDCClientIDCol, idpEvent.ClientID),
handler.NewCol(OIDCClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(OIDCScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(OIDCScopesCol, database.TextArray[string](idpEvent.Scopes)),
handler.NewCol(OIDCIDTokenMappingCol, true),
},
- crdb.WithTableSuffix(IDPTemplateOIDCSuffix),
+ handler.WithTableSuffix(IDPTemplateOIDCSuffix),
),
), nil
}
@@ -1156,9 +1157,9 @@ func (p *idpTemplateProjection) reduceOldOIDCConfigChanged(event eventstore.Even
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.OIDCIDPChangedEventType, instance.OIDCIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPTemplateSequenceCol, idpEvent.Sequence()),
@@ -1180,22 +1181,22 @@ func (p *idpTemplateProjection) reduceOldOIDCConfigChanged(event eventstore.Even
oidcCols = append(oidcCols, handler.NewCol(OIDCIssuerCol, *idpEvent.Issuer))
}
if idpEvent.Scopes != nil {
- oidcCols = append(oidcCols, handler.NewCol(OIDCScopesCol, database.StringArray(idpEvent.Scopes)))
+ oidcCols = append(oidcCols, handler.NewCol(OIDCScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
if len(oidcCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
oidcCols,
[]handler.Condition{
handler.NewCond(OIDCIDCol, idpEvent.IDPConfigID),
handler.NewCond(OIDCInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateOIDCSuffix),
+ handler.WithTableSuffix(IDPTemplateOIDCSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1212,9 +1213,9 @@ func (p *idpTemplateProjection) reduceOldJWTConfigAdded(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ASFdq2", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPJWTConfigAddedEventType, instance.IDPJWTConfigAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPTemplateSequenceCol, idpEvent.Sequence()),
@@ -1225,7 +1226,7 @@ func (p *idpTemplateProjection) reduceOldJWTConfigAdded(event eventstore.Event)
handler.NewCond(IDPTemplateInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(JWTIDCol, idpEvent.IDPConfigID),
handler.NewCol(JWTInstanceIDCol, idpEvent.Aggregate().InstanceID),
@@ -1234,7 +1235,7 @@ func (p *idpTemplateProjection) reduceOldJWTConfigAdded(event eventstore.Event)
handler.NewCol(JWTKeysEndpointCol, idpEvent.KeysEndpoint),
handler.NewCol(JWTHeaderNameCol, idpEvent.HeaderName),
},
- crdb.WithTableSuffix(IDPTemplateJWTSuffix),
+ handler.WithTableSuffix(IDPTemplateJWTSuffix),
),
), nil
}
@@ -1250,9 +1251,9 @@ func (p *idpTemplateProjection) reduceOldJWTConfigChanged(event eventstore.Event
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.JWTIDPChangedEventType, instance.JWTIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateChangeDateCol, idpEvent.CreationDate()),
handler.NewCol(IDPTemplateSequenceCol, idpEvent.Sequence()),
@@ -1278,18 +1279,18 @@ func (p *idpTemplateProjection) reduceOldJWTConfigChanged(event eventstore.Event
}
if len(jwtCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
jwtCols,
[]handler.Condition{
handler.NewCond(JWTIDCol, idpEvent.IDPConfigID),
handler.NewCond(JWTInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateJWTSuffix),
+ handler.WithTableSuffix(IDPTemplateJWTSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1309,9 +1310,9 @@ func (p *idpTemplateProjection) reduceAzureADIDPAdded(event eventstore.Event) (*
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-x9a022b", "reduce.wrong.event.type %v", []eventstore.EventType{org.AzureADIDPAddedEventType, instance.AzureADIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1329,17 +1330,17 @@ func (p *idpTemplateProjection) reduceAzureADIDPAdded(event eventstore.Event) (*
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(AzureADIDCol, idpEvent.ID),
handler.NewCol(AzureADInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(AzureADClientIDCol, idpEvent.ClientID),
handler.NewCol(AzureADClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(AzureADScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(AzureADScopesCol, database.TextArray[string](idpEvent.Scopes)),
handler.NewCol(AzureADTenantCol, idpEvent.Tenant),
handler.NewCol(AzureADIsEmailVerified, idpEvent.IsEmailVerified),
},
- crdb.WithTableSuffix(IDPTemplateAzureADSuffix),
+ handler.WithTableSuffix(IDPTemplateAzureADSuffix),
),
), nil
}
@@ -1355,9 +1356,9 @@ func (p *idpTemplateProjection) reduceAzureADIDPChanged(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.AzureADIDPChangedEventType, instance.AzureADIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1368,18 +1369,18 @@ func (p *idpTemplateProjection) reduceAzureADIDPChanged(event eventstore.Event)
githubCols := reduceAzureADIDPChangedColumns(idpEvent)
if len(githubCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
githubCols,
[]handler.Condition{
handler.NewCond(AzureADIDCol, idpEvent.ID),
handler.NewCond(AzureADInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateAzureADSuffix),
+ handler.WithTableSuffix(IDPTemplateAzureADSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1399,9 +1400,9 @@ func (p *idpTemplateProjection) reduceGitHubIDPAdded(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-x9a022b", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitHubIDPAddedEventType, instance.GitHubIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1419,15 +1420,15 @@ func (p *idpTemplateProjection) reduceGitHubIDPAdded(event eventstore.Event) (*h
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(GitHubIDCol, idpEvent.ID),
handler.NewCol(GitHubInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(GitHubClientIDCol, idpEvent.ClientID),
handler.NewCol(GitHubClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(GitHubScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(GitHubScopesCol, database.TextArray[string](idpEvent.Scopes)),
},
- crdb.WithTableSuffix(IDPTemplateGitHubSuffix),
+ handler.WithTableSuffix(IDPTemplateGitHubSuffix),
),
), nil
}
@@ -1446,9 +1447,9 @@ func (p *idpTemplateProjection) reduceGitHubEnterpriseIDPAdded(event eventstore.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Sf3g2a", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitHubEnterpriseIDPAddedEventType, instance.GitHubEnterpriseIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1466,7 +1467,7 @@ func (p *idpTemplateProjection) reduceGitHubEnterpriseIDPAdded(event eventstore.
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(GitHubEnterpriseIDCol, idpEvent.ID),
handler.NewCol(GitHubEnterpriseInstanceIDCol, idpEvent.Aggregate().InstanceID),
@@ -1475,9 +1476,9 @@ func (p *idpTemplateProjection) reduceGitHubEnterpriseIDPAdded(event eventstore.
handler.NewCol(GitHubEnterpriseAuthorizationEndpointCol, idpEvent.AuthorizationEndpoint),
handler.NewCol(GitHubEnterpriseTokenEndpointCol, idpEvent.TokenEndpoint),
handler.NewCol(GitHubEnterpriseUserEndpointCol, idpEvent.UserEndpoint),
- handler.NewCol(GitHubEnterpriseScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(GitHubEnterpriseScopesCol, database.TextArray[string](idpEvent.Scopes)),
},
- crdb.WithTableSuffix(IDPTemplateGitHubEnterpriseSuffix),
+ handler.WithTableSuffix(IDPTemplateGitHubEnterpriseSuffix),
),
), nil
}
@@ -1493,9 +1494,9 @@ func (p *idpTemplateProjection) reduceGitHubIDPChanged(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitHubIDPChangedEventType, instance.GitHubIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1506,18 +1507,18 @@ func (p *idpTemplateProjection) reduceGitHubIDPChanged(event eventstore.Event) (
githubCols := reduceGitHubIDPChangedColumns(idpEvent)
if len(githubCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
githubCols,
[]handler.Condition{
handler.NewCond(GitHubIDCol, idpEvent.ID),
handler.NewCond(GitHubInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateGitHubSuffix),
+ handler.WithTableSuffix(IDPTemplateGitHubSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1534,9 +1535,9 @@ func (p *idpTemplateProjection) reduceGitHubEnterpriseIDPChanged(event eventstor
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SDg3g", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitHubEnterpriseIDPChangedEventType, instance.GitHubEnterpriseIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1547,18 +1548,18 @@ func (p *idpTemplateProjection) reduceGitHubEnterpriseIDPChanged(event eventstor
githubCols := reduceGitHubEnterpriseIDPChangedColumns(idpEvent)
if len(githubCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
githubCols,
[]handler.Condition{
handler.NewCond(GitHubEnterpriseIDCol, idpEvent.ID),
handler.NewCond(GitHubEnterpriseInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateGitHubEnterpriseSuffix),
+ handler.WithTableSuffix(IDPTemplateGitHubEnterpriseSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1578,9 +1579,9 @@ func (p *idpTemplateProjection) reduceGitLabIDPAdded(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-x9a022b", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitLabIDPAddedEventType, instance.GitLabIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1598,15 +1599,15 @@ func (p *idpTemplateProjection) reduceGitLabIDPAdded(event eventstore.Event) (*h
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(GitLabIDCol, idpEvent.ID),
handler.NewCol(GitLabInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(GitLabClientIDCol, idpEvent.ClientID),
handler.NewCol(GitLabClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(GitLabScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(GitLabScopesCol, database.TextArray[string](idpEvent.Scopes)),
},
- crdb.WithTableSuffix(IDPTemplateGitLabSuffix),
+ handler.WithTableSuffix(IDPTemplateGitLabSuffix),
),
), nil
}
@@ -1622,9 +1623,9 @@ func (p *idpTemplateProjection) reduceGitLabIDPChanged(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitLabIDPChangedEventType, instance.GitLabIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1635,18 +1636,18 @@ func (p *idpTemplateProjection) reduceGitLabIDPChanged(event eventstore.Event) (
gitlabCols := reduceGitLabIDPChangedColumns(idpEvent)
if len(gitlabCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
gitlabCols,
[]handler.Condition{
handler.NewCond(GitLabIDCol, idpEvent.ID),
handler.NewCond(GitLabInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateGitLabSuffix),
+ handler.WithTableSuffix(IDPTemplateGitLabSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1666,9 +1667,9 @@ func (p *idpTemplateProjection) reduceGitLabSelfHostedIDPAdded(event eventstore.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SAF3gw", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitLabSelfHostedIDPAddedEventType, instance.GitLabSelfHostedIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1686,16 +1687,16 @@ func (p *idpTemplateProjection) reduceGitLabSelfHostedIDPAdded(event eventstore.
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(GitLabSelfHostedIDCol, idpEvent.ID),
handler.NewCol(GitLabSelfHostedInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(GitLabSelfHostedIssuerCol, idpEvent.Issuer),
handler.NewCol(GitLabSelfHostedClientIDCol, idpEvent.ClientID),
handler.NewCol(GitLabSelfHostedClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(GitLabSelfHostedScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(GitLabSelfHostedScopesCol, database.TextArray[string](idpEvent.Scopes)),
},
- crdb.WithTableSuffix(IDPTemplateGitLabSelfHostedSuffix),
+ handler.WithTableSuffix(IDPTemplateGitLabSelfHostedSuffix),
),
), nil
}
@@ -1711,9 +1712,9 @@ func (p *idpTemplateProjection) reduceGitLabSelfHostedIDPChanged(event eventstor
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SAf3g2", "reduce.wrong.event.type %v", []eventstore.EventType{org.GitLabSelfHostedIDPChangedEventType, instance.GitLabSelfHostedIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1724,18 +1725,18 @@ func (p *idpTemplateProjection) reduceGitLabSelfHostedIDPChanged(event eventstor
gitlabCols := reduceGitLabSelfHostedIDPChangedColumns(idpEvent)
if len(gitlabCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
gitlabCols,
[]handler.Condition{
handler.NewCond(GitLabSelfHostedIDCol, idpEvent.ID),
handler.NewCond(GitLabSelfHostedInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateGitLabSelfHostedSuffix),
+ handler.WithTableSuffix(IDPTemplateGitLabSelfHostedSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1755,9 +1756,9 @@ func (p *idpTemplateProjection) reduceGoogleIDPAdded(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ap9ihb", "reduce.wrong.event.type %v", []eventstore.EventType{org.GoogleIDPAddedEventType, instance.GoogleIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1775,15 +1776,15 @@ func (p *idpTemplateProjection) reduceGoogleIDPAdded(event eventstore.Event) (*h
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(GoogleIDCol, idpEvent.ID),
handler.NewCol(GoogleInstanceIDCol, idpEvent.Aggregate().InstanceID),
handler.NewCol(GoogleClientIDCol, idpEvent.ClientID),
handler.NewCol(GoogleClientSecretCol, idpEvent.ClientSecret),
- handler.NewCol(GoogleScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(GoogleScopesCol, database.TextArray[string](idpEvent.Scopes)),
},
- crdb.WithTableSuffix(IDPTemplateGoogleSuffix),
+ handler.WithTableSuffix(IDPTemplateGoogleSuffix),
),
), nil
}
@@ -1799,9 +1800,9 @@ func (p *idpTemplateProjection) reduceGoogleIDPChanged(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.GoogleIDPChangedEventType, instance.GoogleIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1812,18 +1813,18 @@ func (p *idpTemplateProjection) reduceGoogleIDPChanged(event eventstore.Event) (
googleCols := reduceGoogleIDPChangedColumns(idpEvent)
if len(googleCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
googleCols,
[]handler.Condition{
handler.NewCond(GoogleIDCol, idpEvent.ID),
handler.NewCond(GoogleInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateGoogleSuffix),
+ handler.WithTableSuffix(IDPTemplateGoogleSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1843,9 +1844,9 @@ func (p *idpTemplateProjection) reduceLDAPIDPAdded(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-9s02m1", "reduce.wrong.event.type %v", []eventstore.EventType{org.LDAPIDPAddedEventType, instance.LDAPIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1863,18 +1864,18 @@ func (p *idpTemplateProjection) reduceLDAPIDPAdded(event eventstore.Event) (*han
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(LDAPIDCol, idpEvent.ID),
handler.NewCol(LDAPInstanceIDCol, idpEvent.Aggregate().InstanceID),
- handler.NewCol(LDAPServersCol, database.StringArray(idpEvent.Servers)),
+ handler.NewCol(LDAPServersCol, database.TextArray[string](idpEvent.Servers)),
handler.NewCol(LDAPStartTLSCol, idpEvent.StartTLS),
handler.NewCol(LDAPBaseDNCol, idpEvent.BaseDN),
handler.NewCol(LDAPBindDNCol, idpEvent.BindDN),
handler.NewCol(LDAPBindPasswordCol, idpEvent.BindPassword),
handler.NewCol(LDAPUserBaseCol, idpEvent.UserBase),
- handler.NewCol(LDAPUserObjectClassesCol, database.StringArray(idpEvent.UserObjectClasses)),
- handler.NewCol(LDAPUserFiltersCol, database.StringArray(idpEvent.UserFilters)),
+ handler.NewCol(LDAPUserObjectClassesCol, database.TextArray[string](idpEvent.UserObjectClasses)),
+ handler.NewCol(LDAPUserFiltersCol, database.TextArray[string](idpEvent.UserFilters)),
handler.NewCol(LDAPTimeoutCol, idpEvent.Timeout),
handler.NewCol(LDAPIDAttributeCol, idpEvent.IDAttribute),
handler.NewCol(LDAPFirstNameAttributeCol, idpEvent.FirstNameAttribute),
@@ -1890,7 +1891,7 @@ func (p *idpTemplateProjection) reduceLDAPIDPAdded(event eventstore.Event) (*han
handler.NewCol(LDAPAvatarURLAttributeCol, idpEvent.AvatarURLAttribute),
handler.NewCol(LDAPProfileAttributeCol, idpEvent.ProfileAttribute),
},
- crdb.WithTableSuffix(IDPTemplateLDAPSuffix),
+ handler.WithTableSuffix(IDPTemplateLDAPSuffix),
),
), nil
}
@@ -1906,9 +1907,9 @@ func (p *idpTemplateProjection) reduceLDAPIDPChanged(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-p1582ks", "reduce.wrong.event.type %v", []eventstore.EventType{org.LDAPIDPChangedEventType, instance.LDAPIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -1920,18 +1921,18 @@ func (p *idpTemplateProjection) reduceLDAPIDPChanged(event eventstore.Event) (*h
ldapCols := reduceLDAPIDPChangedColumns(idpEvent)
if len(ldapCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
ldapCols,
[]handler.Condition{
handler.NewCond(LDAPIDCol, idpEvent.ID),
handler.NewCond(LDAPInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateLDAPSuffix),
+ handler.WithTableSuffix(IDPTemplateLDAPSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -1951,9 +1952,9 @@ func (p *idpTemplateProjection) reduceSAMLIDPAdded(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-9s02m1", "reduce.wrong.event.type %v", []eventstore.EventType{org.SAMLIDPAddedEventType, instance.SAMLIDPAddedEventType})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -1971,7 +1972,7 @@ func (p *idpTemplateProjection) reduceSAMLIDPAdded(event eventstore.Event) (*han
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(SAMLIDCol, idpEvent.ID),
handler.NewCol(SAMLInstanceIDCol, idpEvent.Aggregate().InstanceID),
@@ -1981,7 +1982,7 @@ func (p *idpTemplateProjection) reduceSAMLIDPAdded(event eventstore.Event) (*han
handler.NewCol(SAMLBindingCol, idpEvent.Binding),
handler.NewCol(SAMLWithSignedRequestCol, idpEvent.WithSignedRequest),
},
- crdb.WithTableSuffix(IDPTemplateSAMLSuffix),
+ handler.WithTableSuffix(IDPTemplateSAMLSuffix),
),
), nil
}
@@ -1997,9 +1998,9 @@ func (p *idpTemplateProjection) reduceSAMLIDPChanged(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-o7c0fii4ad", "reduce.wrong.event.type %v", []eventstore.EventType{org.SAMLIDPChangedEventType, instance.SAMLIDPChangedEventType})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -2011,18 +2012,18 @@ func (p *idpTemplateProjection) reduceSAMLIDPChanged(event eventstore.Event) (*h
SAMLCols := reduceSAMLIDPChangedColumns(idpEvent)
if len(SAMLCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
SAMLCols,
[]handler.Condition{
handler.NewCond(SAMLIDCol, idpEvent.ID),
handler.NewCond(SAMLInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateSAMLSuffix),
+ handler.WithTableSuffix(IDPTemplateSAMLSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -2042,9 +2043,9 @@ func (p *idpTemplateProjection) reduceAppleIDPAdded(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SFvg3", "reduce.wrong.event.type %v", []eventstore.EventType{org.AppleIDPAddedEventType /*, instance.AppleIDPAddedEventType*/})
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(IDPTemplateIDCol, idpEvent.ID),
handler.NewCol(IDPTemplateCreationDateCol, idpEvent.CreationDate()),
@@ -2062,7 +2063,7 @@ func (p *idpTemplateProjection) reduceAppleIDPAdded(event eventstore.Event) (*ha
handler.NewCol(IDPTemplateIsAutoUpdateCol, idpEvent.IsAutoUpdate),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(AppleIDCol, idpEvent.ID),
handler.NewCol(AppleInstanceIDCol, idpEvent.Aggregate().InstanceID),
@@ -2070,9 +2071,9 @@ func (p *idpTemplateProjection) reduceAppleIDPAdded(event eventstore.Event) (*ha
handler.NewCol(AppleTeamIDCol, idpEvent.TeamID),
handler.NewCol(AppleKeyIDCol, idpEvent.KeyID),
handler.NewCol(ApplePrivateKeyCol, idpEvent.PrivateKey),
- handler.NewCol(AppleScopesCol, database.StringArray(idpEvent.Scopes)),
+ handler.NewCol(AppleScopesCol, database.TextArray[string](idpEvent.Scopes)),
},
- crdb.WithTableSuffix(IDPTemplateAppleSuffix),
+ handler.WithTableSuffix(IDPTemplateAppleSuffix),
),
), nil
}
@@ -2088,9 +2089,9 @@ func (p *idpTemplateProjection) reduceAppleIDPChanged(event eventstore.Event) (*
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-GBez3", "reduce.wrong.event.type %v", []eventstore.EventType{org.AppleIDPChangedEventType /*, instance.AppleIDPChangedEventType*/})
}
- ops := make([]func(eventstore.Event) crdb.Exec, 0, 2)
+ ops := make([]func(eventstore.Event) handler.Exec, 0, 2)
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
reduceIDPChangedTemplateColumns(idpEvent.Name, idpEvent.CreationDate(), idpEvent.Sequence(), idpEvent.OptionChanges),
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -2101,18 +2102,18 @@ func (p *idpTemplateProjection) reduceAppleIDPChanged(event eventstore.Event) (*
appleCols := reduceAppleIDPChangedColumns(idpEvent)
if len(appleCols) > 0 {
ops = append(ops,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
appleCols,
[]handler.Condition{
handler.NewCond(AppleIDCol, idpEvent.ID),
handler.NewCond(AppleInstanceIDCol, idpEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(IDPTemplateAppleSuffix),
+ handler.WithTableSuffix(IDPTemplateAppleSuffix),
),
)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
&idpEvent,
ops...,
), nil
@@ -2129,7 +2130,7 @@ func (p *idpTemplateProjection) reduceIDPConfigRemoved(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SAFet", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigRemovedEventType, instance.IDPConfigRemovedEventType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
&idpEvent,
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ConfigID),
@@ -2149,7 +2150,7 @@ func (p *idpTemplateProjection) reduceIDPRemoved(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-xbcvwin2", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPRemovedEventType, instance.IDPRemovedEventType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
&idpEvent,
[]handler.Condition{
handler.NewCond(IDPTemplateIDCol, idpEvent.ID),
@@ -2164,7 +2165,7 @@ func (p *idpTemplateProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Jp0D2K", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(IDPTemplateInstanceIDCol, e.Aggregate().InstanceID),
@@ -2214,7 +2215,7 @@ func reduceOAuthIDPChangedColumns(idpEvent idp.OAuthIDPChangedEvent) []handler.C
oauthCols = append(oauthCols, handler.NewCol(OAuthUserEndpointCol, *idpEvent.UserEndpoint))
}
if idpEvent.Scopes != nil {
- oauthCols = append(oauthCols, handler.NewCol(OAuthScopesCol, database.StringArray(idpEvent.Scopes)))
+ oauthCols = append(oauthCols, handler.NewCol(OAuthScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
if idpEvent.IDAttribute != nil {
oauthCols = append(oauthCols, handler.NewCol(OAuthIDAttributeCol, *idpEvent.IDAttribute))
@@ -2234,7 +2235,7 @@ func reduceOIDCIDPChangedColumns(idpEvent idp.OIDCIDPChangedEvent) []handler.Col
oidcCols = append(oidcCols, handler.NewCol(OIDCIssuerCol, *idpEvent.Issuer))
}
if idpEvent.Scopes != nil {
- oidcCols = append(oidcCols, handler.NewCol(OIDCScopesCol, database.StringArray(idpEvent.Scopes)))
+ oidcCols = append(oidcCols, handler.NewCol(OIDCScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
if idpEvent.IsIDTokenMapping != nil {
oidcCols = append(oidcCols, handler.NewCol(OIDCIDTokenMappingCol, *idpEvent.IsIDTokenMapping))
@@ -2268,7 +2269,7 @@ func reduceAzureADIDPChangedColumns(idpEvent idp.AzureADIDPChangedEvent) []handl
azureADCols = append(azureADCols, handler.NewCol(AzureADClientSecretCol, *idpEvent.ClientSecret))
}
if idpEvent.Scopes != nil {
- azureADCols = append(azureADCols, handler.NewCol(AzureADScopesCol, database.StringArray(idpEvent.Scopes)))
+ azureADCols = append(azureADCols, handler.NewCol(AzureADScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
if idpEvent.Tenant != nil {
azureADCols = append(azureADCols, handler.NewCol(AzureADTenantCol, *idpEvent.Tenant))
@@ -2288,7 +2289,7 @@ func reduceGitHubIDPChangedColumns(idpEvent idp.GitHubIDPChangedEvent) []handler
oauthCols = append(oauthCols, handler.NewCol(GitHubClientSecretCol, *idpEvent.ClientSecret))
}
if idpEvent.Scopes != nil {
- oauthCols = append(oauthCols, handler.NewCol(GitHubScopesCol, database.StringArray(idpEvent.Scopes)))
+ oauthCols = append(oauthCols, handler.NewCol(GitHubScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
return oauthCols
}
@@ -2311,7 +2312,7 @@ func reduceGitHubEnterpriseIDPChangedColumns(idpEvent idp.GitHubEnterpriseIDPCha
oauthCols = append(oauthCols, handler.NewCol(GitHubEnterpriseUserEndpointCol, *idpEvent.UserEndpoint))
}
if idpEvent.Scopes != nil {
- oauthCols = append(oauthCols, handler.NewCol(GitHubEnterpriseScopesCol, database.StringArray(idpEvent.Scopes)))
+ oauthCols = append(oauthCols, handler.NewCol(GitHubEnterpriseScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
return oauthCols
}
@@ -2325,7 +2326,7 @@ func reduceGitLabIDPChangedColumns(idpEvent idp.GitLabIDPChangedEvent) []handler
gitlabCols = append(gitlabCols, handler.NewCol(GitLabClientSecretCol, *idpEvent.ClientSecret))
}
if idpEvent.Scopes != nil {
- gitlabCols = append(gitlabCols, handler.NewCol(GitLabScopesCol, database.StringArray(idpEvent.Scopes)))
+ gitlabCols = append(gitlabCols, handler.NewCol(GitLabScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
return gitlabCols
}
@@ -2342,7 +2343,7 @@ func reduceGitLabSelfHostedIDPChangedColumns(idpEvent idp.GitLabSelfHostedIDPCha
gitlabCols = append(gitlabCols, handler.NewCol(GitLabSelfHostedClientSecretCol, *idpEvent.ClientSecret))
}
if idpEvent.Scopes != nil {
- gitlabCols = append(gitlabCols, handler.NewCol(GitLabSelfHostedScopesCol, database.StringArray(idpEvent.Scopes)))
+ gitlabCols = append(gitlabCols, handler.NewCol(GitLabSelfHostedScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
return gitlabCols
}
@@ -2356,7 +2357,7 @@ func reduceGoogleIDPChangedColumns(idpEvent idp.GoogleIDPChangedEvent) []handler
googleCols = append(googleCols, handler.NewCol(GoogleClientSecretCol, *idpEvent.ClientSecret))
}
if idpEvent.Scopes != nil {
- googleCols = append(googleCols, handler.NewCol(GoogleScopesCol, database.StringArray(idpEvent.Scopes)))
+ googleCols = append(googleCols, handler.NewCol(GoogleScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
return googleCols
}
@@ -2364,7 +2365,7 @@ func reduceGoogleIDPChangedColumns(idpEvent idp.GoogleIDPChangedEvent) []handler
func reduceLDAPIDPChangedColumns(idpEvent idp.LDAPIDPChangedEvent) []handler.Column {
ldapCols := make([]handler.Column, 0, 22)
if idpEvent.Servers != nil {
- ldapCols = append(ldapCols, handler.NewCol(LDAPServersCol, database.StringArray(idpEvent.Servers)))
+ ldapCols = append(ldapCols, handler.NewCol(LDAPServersCol, database.TextArray[string](idpEvent.Servers)))
}
if idpEvent.StartTLS != nil {
ldapCols = append(ldapCols, handler.NewCol(LDAPStartTLSCol, *idpEvent.StartTLS))
@@ -2382,10 +2383,10 @@ func reduceLDAPIDPChangedColumns(idpEvent idp.LDAPIDPChangedEvent) []handler.Col
ldapCols = append(ldapCols, handler.NewCol(LDAPUserBaseCol, *idpEvent.UserBase))
}
if idpEvent.UserObjectClasses != nil {
- ldapCols = append(ldapCols, handler.NewCol(LDAPUserObjectClassesCol, database.StringArray(idpEvent.UserObjectClasses)))
+ ldapCols = append(ldapCols, handler.NewCol(LDAPUserObjectClassesCol, database.TextArray[string](idpEvent.UserObjectClasses)))
}
if idpEvent.UserFilters != nil {
- ldapCols = append(ldapCols, handler.NewCol(LDAPUserFiltersCol, database.StringArray(idpEvent.UserFilters)))
+ ldapCols = append(ldapCols, handler.NewCol(LDAPUserFiltersCol, database.TextArray[string](idpEvent.UserFilters)))
}
if idpEvent.Timeout != nil {
ldapCols = append(ldapCols, handler.NewCol(LDAPTimeoutCol, *idpEvent.Timeout))
@@ -2447,7 +2448,7 @@ func reduceAppleIDPChangedColumns(idpEvent idp.AppleIDPChangedEvent) []handler.C
appleCols = append(appleCols, handler.NewCol(ApplePrivateKeyCol, *idpEvent.PrivateKey))
}
if idpEvent.Scopes != nil {
- appleCols = append(appleCols, handler.NewCol(AppleScopesCol, database.StringArray(idpEvent.Scopes)))
+ appleCols = append(appleCols, handler.NewCol(AppleScopesCol, database.TextArray[string](idpEvent.Scopes)))
}
return appleCols
}
diff --git a/internal/query/projection/idp_template_test.go b/internal/query/projection/idp_template_test.go
index 9e99c6cdbc..5e33aebe87 100644
--- a/internal/query/projection/idp_template_test.go
+++ b/internal/query/projection/idp_template_test.go
@@ -9,8 +9,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -38,17 +37,17 @@ func TestIDPTemplateProjection_reducesRemove(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(IDPInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -65,16 +64,16 @@ func TestIDPTemplateProjection_reducesRemove(t *testing.T) {
name: "org reduceOwnerRemoved",
reduce: (&idpTemplateProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -92,18 +91,18 @@ func TestIDPTemplateProjection_reducesRemove(t *testing.T) {
name: "org reduceIDPRemoved",
reduce: (&idpTemplateProjection{}).reduceIDPRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id"
}`),
- ), org.IDPRemovedEventMapper),
+ ), org.IDPRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -121,18 +120,18 @@ func TestIDPTemplateProjection_reducesRemove(t *testing.T) {
name: "org reduceIDPConfigRemoved",
reduce: (&idpTemplateProjection{}).reduceIDPConfigRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-id"
}`),
- ), org.IDPConfigRemovedEventMapper),
+ ), org.IDPConfigRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -175,10 +174,11 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
{
name: "instance reduceOAuthIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OAuthIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.OAuthIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "custom-zitadel-instance",
"clientId": "client_id",
@@ -197,13 +197,12 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.OAuthIDPAddedEventMapper),
+ ), instance.OAuthIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOAuthIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -235,7 +234,7 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
"auth",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"id-attribute",
},
},
@@ -246,10 +245,11 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
{
name: "org reduceOAuthIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OAuthIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.OAuthIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "custom-zitadel-instance",
"clientId": "client_id",
@@ -268,13 +268,12 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.OAuthIDPAddedEventMapper),
+ ), org.OAuthIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOAuthIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -306,7 +305,7 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
"auth",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"id-attribute",
},
},
@@ -317,21 +316,21 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
{
name: "instance reduceOAuthIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OAuthIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.OAuthIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"clientId": "id"
}`),
- ), instance.OAuthIDPChangedEventMapper),
+ ), instance.OAuthIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOAuthIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -359,10 +358,11 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
{
name: "instance reduceOAuthIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OAuthIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.OAuthIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "custom-zitadel-instance",
"clientId": "client_id",
@@ -381,13 +381,12 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.OAuthIDPChangedEventMapper),
+ ), instance.OAuthIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOAuthIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -412,7 +411,7 @@ func TestIDPTemplateProjection_reducesOAuth(t *testing.T) {
"auth",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"id-attribute",
"idp-id",
"instance-id",
@@ -451,10 +450,11 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
{
name: "instance reduceAzureADIDPAdded minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.AzureADIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.AzureADIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"client_id": "client_id",
@@ -464,13 +464,12 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
"keyId": "key-id"
}
}`),
- ), instance.AzureADIDPAddedEventMapper),
+ ), instance.AzureADIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceAzureADIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -499,7 +498,7 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray(nil),
+ database.TextArray[string](nil),
"",
false,
},
@@ -511,10 +510,11 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
{
name: "instance reduceAzureADIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.AzureADIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.AzureADIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"client_id": "client_id",
@@ -531,13 +531,12 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.AzureADIDPAddedEventMapper),
+ ), instance.AzureADIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceAzureADIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -566,7 +565,7 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"tenant",
true,
},
@@ -578,10 +577,11 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
{
name: "org reduceAzureADIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.AzureADIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.AzureADIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"client_id": "client_id",
@@ -598,13 +598,12 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.AzureADIDPAddedEventMapper),
+ ), org.AzureADIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceAzureADIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -633,7 +632,7 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"tenant",
true,
},
@@ -645,21 +644,21 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
{
name: "instance reduceAzureADIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.AzureADIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.AzureADIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"client_id": "id"
}`),
- ), instance.AzureADIDPChangedEventMapper),
+ ), instance.AzureADIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceAzureADIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -687,10 +686,11 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
{
name: "instance reduceAzureADIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.AzureADIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.AzureADIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"client_id": "client_id",
@@ -707,13 +707,12 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.AzureADIDPChangedEventMapper),
+ ), instance.AzureADIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceAzureADIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -735,7 +734,7 @@ func TestIDPTemplateProjection_reducesAzureAD(t *testing.T) {
expectedArgs: []interface{}{
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"tenant",
true,
"idp-id",
@@ -775,10 +774,11 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
{
name: "instance reduceGitHubIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitHubIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitHubIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"clientId": "client_id",
@@ -793,13 +793,12 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitHubIDPAddedEventMapper),
+ ), instance.GitHubIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -828,7 +827,7 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -838,10 +837,11 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
{
name: "org reduceGitHubIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.GitHubIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.GitHubIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"clientId": "client_id",
@@ -856,13 +856,12 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.GitHubIDPAddedEventMapper),
+ ), org.GitHubIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -891,7 +890,7 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -901,21 +900,21 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
{
name: "instance reduceGitHubIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitHubIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitHubIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"clientId": "id"
}`),
- ), instance.GitHubIDPChangedEventMapper),
+ ), instance.GitHubIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -943,10 +942,11 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
{
name: "instance reduceGitHubIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitHubIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitHubIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"clientId": "client_id",
@@ -961,13 +961,12 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitHubIDPChangedEventMapper),
+ ), instance.GitHubIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -989,7 +988,7 @@ func TestIDPTemplateProjection_reducesGitHub(t *testing.T) {
expectedArgs: []interface{}{
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"idp-id",
"instance-id",
},
@@ -1027,10 +1026,11 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
{
name: "instance reduceGitHubEnterpriseIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitHubEnterpriseIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitHubEnterpriseIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"clientId": "client_id",
@@ -1048,13 +1048,12 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitHubEnterpriseIDPAddedEventMapper),
+ ), instance.GitHubEnterpriseIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubEnterpriseIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1086,7 +1085,7 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
"auth",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1096,10 +1095,11 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
{
name: "org reduceGitHubEnterpriseIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.GitHubEnterpriseIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.GitHubEnterpriseIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"clientId": "client_id",
@@ -1117,13 +1117,12 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.GitHubEnterpriseIDPAddedEventMapper),
+ ), org.GitHubEnterpriseIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubEnterpriseIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1155,7 +1154,7 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
"auth",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1165,21 +1164,21 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
{
name: "instance reduceGitHubEnterpriseIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitHubEnterpriseIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitHubEnterpriseIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"clientId": "id"
}`),
- ), instance.GitHubEnterpriseIDPChangedEventMapper),
+ ), instance.GitHubEnterpriseIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubEnterpriseIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1207,10 +1206,11 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
{
name: "instance reduceGitHubEnterpriseIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitHubEnterpriseIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitHubEnterpriseIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"clientId": "client_id",
@@ -1228,13 +1228,12 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitHubEnterpriseIDPChangedEventMapper),
+ ), instance.GitHubEnterpriseIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitHubEnterpriseIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1259,7 +1258,7 @@ func TestIDPTemplateProjection_reducesGitHubEnterprise(t *testing.T) {
"auth",
"token",
"user",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"idp-id",
"instance-id",
},
@@ -1297,10 +1296,11 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
{
name: "instance reduceGitLabIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitLabIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitLabIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"client_id": "client_id",
"client_secret": {
@@ -1314,13 +1314,12 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitLabIDPAddedEventMapper),
+ ), instance.GitLabIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1349,7 +1348,7 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1359,10 +1358,11 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
{
name: "org reduceGitLabIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.GitLabIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.GitLabIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"client_id": "client_id",
"client_secret": {
@@ -1376,13 +1376,12 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.GitLabIDPAddedEventMapper),
+ ), org.GitLabIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1411,7 +1410,7 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1421,21 +1420,21 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
{
name: "instance reduceGitLabIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitLabIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitLabIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"client_id": "id"
}`),
- ), instance.GitLabIDPChangedEventMapper),
+ ), instance.GitLabIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1463,10 +1462,11 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
{
name: "instance reduceGitLabIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitLabIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitLabIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"client_id": "client_id",
@@ -1481,13 +1481,12 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitLabIDPChangedEventMapper),
+ ), instance.GitLabIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1509,7 +1508,7 @@ func TestIDPTemplateProjection_reducesGitLab(t *testing.T) {
expectedArgs: []interface{}{
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"idp-id",
"instance-id",
},
@@ -1547,10 +1546,11 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
{
name: "instance reduceGitLabSelfHostedIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitLabSelfHostedIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitLabSelfHostedIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"issuer": "issuer",
@@ -1566,13 +1566,12 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitLabSelfHostedIDPAddedEventMapper),
+ ), instance.GitLabSelfHostedIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabSelfHostedIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1602,7 +1601,7 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
"issuer",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1612,10 +1611,11 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
{
name: "org reduceGitLabSelfHostedIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.GitLabSelfHostedIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.GitLabSelfHostedIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"issuer": "issuer",
@@ -1631,13 +1631,12 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.GitLabSelfHostedIDPAddedEventMapper),
+ ), org.GitLabSelfHostedIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabSelfHostedIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1667,7 +1666,7 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
"issuer",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1677,21 +1676,21 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
{
name: "instance reduceGitLabSelfHostedIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitLabSelfHostedIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitLabSelfHostedIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"issuer": "issuer"
}`),
- ), instance.GitLabSelfHostedIDPChangedEventMapper),
+ ), instance.GitLabSelfHostedIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabSelfHostedIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1719,10 +1718,11 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
{
name: "instance reduceGitLabSelfHostedIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GitLabSelfHostedIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GitLabSelfHostedIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"issuer": "issuer",
@@ -1738,13 +1738,12 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GitLabSelfHostedIDPChangedEventMapper),
+ ), instance.GitLabSelfHostedIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGitLabSelfHostedIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1767,7 +1766,7 @@ func TestIDPTemplateProjection_reducesGitLabSelfHosted(t *testing.T) {
"issuer",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"idp-id",
"instance-id",
},
@@ -1805,10 +1804,11 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
{
name: "instance reduceGoogleIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GoogleIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GoogleIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"clientId": "client_id",
"clientSecret": {
@@ -1822,13 +1822,12 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GoogleIDPAddedEventMapper),
+ ), instance.GoogleIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGoogleIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1857,7 +1856,7 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1867,10 +1866,11 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
{
name: "org reduceGoogleIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.GoogleIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.GoogleIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"clientId": "client_id",
"clientSecret": {
@@ -1884,13 +1884,12 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.GoogleIDPAddedEventMapper),
+ ), org.GoogleIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGoogleIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1919,7 +1918,7 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -1929,21 +1928,21 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
{
name: "instance reduceGoogleIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GoogleIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GoogleIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"clientId": "id"
}`),
- ), instance.GoogleIDPChangedEventMapper),
+ ), instance.GoogleIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGoogleIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1971,10 +1970,11 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
{
name: "instance reduceGoogleIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.GoogleIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.GoogleIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"clientId": "client_id",
@@ -1989,13 +1989,12 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.GoogleIDPChangedEventMapper),
+ ), instance.GoogleIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceGoogleIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2017,7 +2016,7 @@ func TestIDPTemplateProjection_reducesGoogle(t *testing.T) {
expectedArgs: []interface{}{
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"idp-id",
"instance-id",
},
@@ -2055,10 +2054,11 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
{
name: "instance reduceLDAPIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LDAPIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LDAPIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "custom-zitadel-instance",
"servers": ["server"],
@@ -2092,13 +2092,12 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.LDAPIDPAddedEventMapper),
+ ), instance.LDAPIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceLDAPIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2125,14 +2124,14 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
expectedArgs: []interface{}{
"idp-id",
"instance-id",
- database.StringArray{"server"},
+ database.TextArray[string]{"server"},
false,
"basedn",
"binddn",
anyArg{},
"user",
- database.StringArray{"object"},
- database.StringArray{"filter"},
+ database.TextArray[string]{"object"},
+ database.TextArray[string]{"filter"},
time.Duration(30000000000),
"id",
"first",
@@ -2156,10 +2155,11 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
{
name: "org reduceLDAPIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LDAPIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LDAPIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "custom-zitadel-instance",
"servers": ["server"],
@@ -2193,13 +2193,12 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.LDAPIDPAddedEventMapper),
+ ), org.LDAPIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceLDAPIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2226,14 +2225,14 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
expectedArgs: []interface{}{
"idp-id",
"instance-id",
- database.StringArray{"server"},
+ database.TextArray[string]{"server"},
false,
"basedn",
"binddn",
anyArg{},
"user",
- database.StringArray{"object"},
- database.StringArray{"filter"},
+ database.TextArray[string]{"object"},
+ database.TextArray[string]{"filter"},
time.Duration(30000000000),
"id",
"first",
@@ -2257,21 +2256,21 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
{
name: "instance reduceLDAPIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LDAPIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LDAPIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "custom-zitadel-instance",
"baseDN": "basedn"
}`),
- ), instance.LDAPIDPChangedEventMapper),
+ ), instance.LDAPIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceLDAPIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2299,10 +2298,11 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
{
name: "instance reduceLDAPIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LDAPIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LDAPIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "custom-zitadel-instance",
"servers": ["server"],
@@ -2336,13 +2336,12 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.LDAPIDPChangedEventMapper),
+ ), instance.LDAPIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceLDAPIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2362,14 +2361,14 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
{
expectedStmt: "UPDATE projections.idp_templates5_ldap2 SET (servers, start_tls, base_dn, bind_dn, bind_password, user_base, user_object_classes, user_filters, timeout, id_attribute, first_name_attribute, last_name_attribute, display_name_attribute, nick_name_attribute, preferred_username_attribute, email_attribute, email_verified, phone_attribute, phone_verified_attribute, preferred_language_attribute, avatar_url_attribute, profile_attribute) = ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18, $19, $20, $21, $22) WHERE (idp_id = $23) AND (instance_id = $24)",
expectedArgs: []interface{}{
- database.StringArray{"server"},
+ database.TextArray[string]{"server"},
false,
"basedn",
"binddn",
anyArg{},
"user",
- database.StringArray{"object"},
- database.StringArray{"filter"},
+ database.TextArray[string]{"object"},
+ database.TextArray[string]{"filter"},
time.Duration(30000000000),
"id",
"first",
@@ -2396,16 +2395,16 @@ func TestIDPTemplateProjection_reducesLDAP(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&idpProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2449,7 +2448,7 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
name: "instance reduceAppleIDPAdded",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.AppleIDPAddedEventType),
+ instance.AppleIDPAddedEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2471,9 +2470,8 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceAppleIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2504,7 +2502,7 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
"team_id",
"key_id",
anyArg{},
- database.StringArray{"name"},
+ database.TextArray[string]{"name"},
},
},
},
@@ -2515,7 +2513,7 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
name: "org reduceAppleIDPAdded",
args: args{
event: getEvent(testEvent(
- repository.EventType(org.AppleIDPAddedEventType),
+ org.AppleIDPAddedEventType,
org.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2537,9 +2535,8 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceAppleIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2570,7 +2567,7 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
"team_id",
"key_id",
anyArg{},
- database.StringArray{"name"},
+ database.TextArray[string]{"name"},
},
},
},
@@ -2581,7 +2578,7 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
name: "instance reduceAppleIDPChanged minimal",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.AppleIDPChangedEventType),
+ instance.AppleIDPChangedEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2592,9 +2589,8 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceAppleIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2623,7 +2619,7 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
name: "instance reduceAppleIDPChanged",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.AppleIDPChangedEventType),
+ instance.AppleIDPChangedEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2646,9 +2642,8 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceAppleIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2672,7 +2667,7 @@ func TestIDPTemplateProjection_reducesApple(t *testing.T) {
"team_id",
"key_id",
anyArg{},
- database.StringArray{"name"},
+ database.TextArray[string]{"name"},
"idp-id",
"instance-id",
},
@@ -2711,7 +2706,7 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
name: "instance reduceSAMLIDPAdded",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.SAMLIDPAddedEventType),
+ instance.SAMLIDPAddedEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2734,9 +2729,8 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceSAMLIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2778,7 +2772,7 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
name: "org reduceSAMLIDPAdded",
args: args{
event: getEvent(testEvent(
- repository.EventType(org.SAMLIDPAddedEventType),
+ org.SAMLIDPAddedEventType,
org.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2801,9 +2795,8 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceSAMLIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2845,7 +2838,7 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
name: "instance reduceSAMLIDPChanged minimal",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.SAMLIDPChangedEventType),
+ instance.SAMLIDPChangedEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2856,9 +2849,8 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceSAMLIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2887,7 +2879,7 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
name: "instance reduceSAMLIDPChanged",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.SAMLIDPChangedEventType),
+ instance.SAMLIDPChangedEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -2910,9 +2902,8 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceSAMLIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -2950,15 +2941,14 @@ func TestIDPTemplateProjection_reducesSAML(t *testing.T) {
reduce: (&idpProjection{}).reduceOwnerRemoved,
args: args{
event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
+ org.OrgRemovedEventType,
org.AggregateType,
nil,
), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3001,10 +2991,11 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
{
name: "instance reduceOIDCIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OIDCIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.OIDCIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"issuer": "issuer",
"clientId": "client_id",
@@ -3020,13 +3011,12 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.OIDCIDPAddedEventMapper),
+ ), instance.OIDCIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3056,7 +3046,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"issuer",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
true,
},
},
@@ -3067,10 +3057,11 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
{
name: "org reduceOIDCIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OIDCIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.OIDCIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"issuer": "issuer",
"clientId": "client_id",
@@ -3086,13 +3077,12 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.OIDCIDPAddedEventMapper),
+ ), org.OIDCIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3122,7 +3112,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"issuer",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
true,
},
},
@@ -3133,21 +3123,21 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
{
name: "instance reduceOIDCIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OIDCIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.OIDCIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"clientId": "id"
}`),
- ), instance.OIDCIDPChangedEventMapper),
+ ), instance.OIDCIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3175,10 +3165,11 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
{
name: "instance reduceOIDCIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OIDCIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.OIDCIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"name": "name",
"issuer": "issuer",
@@ -3195,13 +3186,12 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.OIDCIDPChangedEventMapper),
+ ), instance.OIDCIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3224,7 +3214,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"client_id",
anyArg{},
"issuer",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
true,
"idp-id",
"instance-id",
@@ -3238,7 +3228,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
name: "instance reduceOIDCIDPMigratedAzureAD",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.OIDCIDPMigratedAzureADEventType),
+ instance.OIDCIDPMigratedAzureADEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -3261,9 +3251,8 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPMigratedAzureAD,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3295,7 +3284,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"tenant",
true,
},
@@ -3308,7 +3297,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
name: "org reduceOIDCIDPMigratedAzureAD",
args: args{
event: getEvent(testEvent(
- repository.EventType(org.OIDCIDPMigratedAzureADEventType),
+ org.OIDCIDPMigratedAzureADEventType,
org.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -3331,9 +3320,8 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPMigratedAzureAD,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3365,7 +3353,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"tenant",
true,
},
@@ -3378,7 +3366,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
name: "instance reduceOIDCIDPMigratedGoogle",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.OIDCIDPMigratedGoogleEventType),
+ instance.OIDCIDPMigratedGoogleEventType,
instance.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -3399,9 +3387,8 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPMigratedGoogle,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3433,7 +3420,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -3444,7 +3431,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
name: "org reduceOIDCIDPMigratedGoogle",
args: args{
event: getEvent(testEvent(
- repository.EventType(org.OIDCIDPMigratedGoogleEventType),
+ org.OIDCIDPMigratedGoogleEventType,
org.AggregateType,
[]byte(`{
"id": "idp-id",
@@ -3465,9 +3452,8 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
},
reduce: (&idpTemplateProjection{}).reduceOIDCIDPMigratedGoogle,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3499,7 +3485,7 @@ func TestIDPTemplateProjection_reducesOIDC(t *testing.T) {
"instance-id",
"client_id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
},
},
},
@@ -3535,23 +3521,23 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "instance reduceOldConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"idpType": 0,
"stylingType": 0,
"autoRegister": true
}`),
- ), instance.IDPConfigAddedEventMapper),
+ ), instance.IDPConfigAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3580,23 +3566,23 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "org reduceOldConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigAddedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"idpType": 0,
"stylingType": 0,
"autoRegister": true
}`),
- ), org.IDPConfigAddedEventMapper),
+ ), org.IDPConfigAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3625,22 +3611,22 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "instance reduceOldConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"stylingType": 1,
"autoRegister": true
}`),
- ), instance.IDPConfigChangedEventMapper),
+ ), instance.IDPConfigChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3661,22 +3647,22 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "org reduceOldConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigChangedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"stylingType": 1,
"autoRegister": true
}`),
- ), org.IDPConfigChangedEventMapper),
+ ), org.IDPConfigChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3697,10 +3683,11 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "instance reduceOldOIDCConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPOIDCConfigAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPOIDCConfigAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -3713,13 +3700,12 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), instance.IDPOIDCConfigAddedEventMapper),
+ ), instance.IDPOIDCConfigAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldOIDCConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3740,7 +3726,7 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"issuer",
"client-id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
true,
},
},
@@ -3751,10 +3737,11 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "org reduceOldOIDCConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPOIDCConfigAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPOIDCConfigAddedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -3767,13 +3754,12 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), org.IDPOIDCConfigAddedEventMapper),
+ ), org.IDPOIDCConfigAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldOIDCConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3794,7 +3780,7 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"issuer",
"client-id",
anyArg{},
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
true,
},
},
@@ -3805,10 +3791,11 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "instance reduceOldOIDCConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPOIDCConfigChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPOIDCConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -3821,13 +3808,12 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), instance.IDPOIDCConfigChangedEventMapper),
+ ), instance.IDPOIDCConfigChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3845,7 +3831,7 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"client-id",
anyArg{},
"issuer",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"idp-config-id",
"instance-id",
},
@@ -3857,10 +3843,11 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "org reduceOldOIDCConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPOIDCConfigChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPOIDCConfigChangedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -3873,13 +3860,12 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), org.IDPOIDCConfigChangedEventMapper),
+ ), org.IDPOIDCConfigChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3897,7 +3883,7 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
"client-id",
anyArg{},
"issuer",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
"idp-config-id",
"instance-id",
},
@@ -3909,23 +3895,23 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "instance reduceOldJWTConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPJWTConfigAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPJWTConfigAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), instance.IDPJWTConfigAddedEventMapper),
+ ), instance.IDPJWTConfigAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldJWTConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -3957,23 +3943,23 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "org reduceOldJWTConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPJWTConfigAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPJWTConfigAddedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), org.IDPJWTConfigAddedEventMapper),
+ ), org.IDPJWTConfigAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldJWTConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -4004,23 +3990,23 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "instance reduceOldJWTConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPJWTConfigChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPJWTConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), instance.IDPJWTConfigChangedEventMapper),
+ ), instance.IDPJWTConfigChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldJWTConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -4050,23 +4036,23 @@ func TestIDPTemplateProjection_reducesOldConfig(t *testing.T) {
{
name: "org reduceOldJWTConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPJWTConfigChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPJWTConfigChangedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), org.IDPJWTConfigChangedEventMapper),
+ ), org.IDPJWTConfigChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceOldJWTConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -4122,10 +4108,11 @@ func TestIDPTemplateProjection_reducesJWT(t *testing.T) {
{
name: "instance reduceJWTIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.JWTIDPAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.JWTIDPAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"issuer": "issuer",
"jwtEndpoint": "jwt",
@@ -4136,13 +4123,12 @@ func TestIDPTemplateProjection_reducesJWT(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.JWTIDPAddedEventMapper),
+ ), instance.JWTIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceJWTIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -4182,10 +4168,11 @@ func TestIDPTemplateProjection_reducesJWT(t *testing.T) {
{
name: "org reduceJWTIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.JWTIDPAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.JWTIDPAddedEventType,
+ org.AggregateType,
+ []byte(`{
"id": "idp-id",
"issuer": "issuer",
"jwtEndpoint": "jwt",
@@ -4196,13 +4183,12 @@ func TestIDPTemplateProjection_reducesJWT(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), org.JWTIDPAddedEventMapper),
+ ), org.JWTIDPAddedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceJWTIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -4242,21 +4228,21 @@ func TestIDPTemplateProjection_reducesJWT(t *testing.T) {
{
name: "instance reduceJWTIDPChanged minimal",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.JWTIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.JWTIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"isCreationAllowed": true,
"jwtEndpoint": "jwt"
}`),
- ), instance.JWTIDPChangedEventMapper),
+ ), instance.JWTIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceJWTIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -4284,10 +4270,11 @@ func TestIDPTemplateProjection_reducesJWT(t *testing.T) {
{
name: "instance reduceJWTIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.JWTIDPChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.JWTIDPChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "idp-id",
"issuer": "issuer",
"jwtEndpoint": "jwt",
@@ -4298,13 +4285,12 @@ func TestIDPTemplateProjection_reducesJWT(t *testing.T) {
"isAutoCreation": true,
"isAutoUpdate": true
}`),
- ), instance.JWTIDPChangedEventMapper),
+ ), instance.JWTIDPChangedEventMapper),
},
reduce: (&idpTemplateProjection{}).reduceJWTIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/idp_test.go b/internal/query/projection/idp_test.go
index 54eda3b848..bedd528cdf 100644
--- a/internal/query/projection/idp_test.go
+++ b/internal/query/projection/idp_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -26,23 +25,23 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"idpType": 0,
"stylingType": 0,
"autoRegister": true
}`),
- ), instance.IDPConfigAddedEventMapper),
+ ), instance.IDPConfigAddedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -68,22 +67,22 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"stylingType": 1,
"autoRegister": true
}`),
- ), instance.IDPConfigChangedEventMapper),
+ ), instance.IDPConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -105,19 +104,19 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceIDPDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigDeactivatedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigDeactivatedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), instance.IDPConfigDeactivatedEventMapper),
+ ), instance.IDPConfigDeactivatedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -137,19 +136,19 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceIDPReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigReactivatedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigReactivatedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), instance.IDPConfigReactivatedEventMapper),
+ ), instance.IDPConfigReactivatedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPReactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -169,19 +168,19 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceIDPRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), instance.IDPConfigRemovedEventMapper),
+ ), instance.IDPConfigRemovedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -198,17 +197,17 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(IDPInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -224,10 +223,11 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceOIDCConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPOIDCConfigAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPOIDCConfigAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -242,13 +242,12 @@ func TestIDPProjection_reduces(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), instance.IDPOIDCConfigAddedEventMapper),
+ ), instance.IDPOIDCConfigAddedEventMapper),
},
reduce: (&idpProjection{}).reduceOIDCConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -269,7 +268,7 @@ func TestIDPProjection_reduces(t *testing.T) {
"client-id",
anyArg{},
"issuer",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
domain.OIDCMappingFieldUnspecified,
domain.OIDCMappingFieldPreferredLoginName,
"https://api.zitadel.ch/authorize",
@@ -283,10 +282,11 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceOIDCConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPOIDCConfigChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPOIDCConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -301,13 +301,12 @@ func TestIDPProjection_reduces(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), instance.IDPOIDCConfigChangedEventMapper),
+ ), instance.IDPOIDCConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -327,7 +326,7 @@ func TestIDPProjection_reduces(t *testing.T) {
"issuer",
"https://api.zitadel.ch/authorize",
"https://api.zitadel.ch/token",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
domain.OIDCMappingFieldUnspecified,
domain.OIDCMappingFieldPreferredLoginName,
"idp-config-id",
@@ -341,17 +340,17 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceOIDCConfigChanged: no op",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPOIDCConfigChangedEventType),
- instance.AggregateType,
- []byte("{}"),
- ), instance.IDPOIDCConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.IDPOIDCConfigChangedEventType,
+ instance.AggregateType,
+ []byte("{}"),
+ ), instance.IDPOIDCConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -360,23 +359,23 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceJWTConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPJWTConfigAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPJWTConfigAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), instance.IDPJWTConfigAddedEventMapper),
+ ), instance.IDPJWTConfigAddedEventMapper),
},
reduce: (&idpProjection{}).reduceJWTConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -407,23 +406,23 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceJWTConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPJWTConfigChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPJWTConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), instance.IDPJWTConfigChangedEventMapper),
+ ), instance.IDPJWTConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceJWTConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -453,17 +452,17 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "instance reduceJWTConfigChanged: no op",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPJWTConfigChangedEventType),
- instance.AggregateType,
- []byte(`{}`),
- ), instance.IDPJWTConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.IDPJWTConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{}`),
+ ), instance.IDPJWTConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceJWTConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -472,23 +471,23 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceIDPAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigAddedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"idpType": 0,
"stylingType": 0,
"autoRegister": true
}`),
- ), org.IDPConfigAddedEventMapper),
+ ), org.IDPConfigAddedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -514,22 +513,22 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceIDPChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigChangedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"name": "custom-zitadel-instance",
"stylingType": 1,
"autoRegister": true
}`),
- ), org.IDPConfigChangedEventMapper),
+ ), org.IDPConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -551,19 +550,19 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceIDPDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigDeactivatedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigDeactivatedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), org.IDPConfigDeactivatedEventMapper),
+ ), org.IDPConfigDeactivatedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -583,19 +582,19 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceIDPReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigReactivatedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigReactivatedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), org.IDPConfigReactivatedEventMapper),
+ ), org.IDPConfigReactivatedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPReactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -615,19 +614,19 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceIDPRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), org.IDPConfigRemovedEventMapper),
+ ), org.IDPConfigRemovedEventMapper),
},
reduce: (&idpProjection{}).reduceIDPRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -644,10 +643,11 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceOIDCConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPOIDCConfigAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPOIDCConfigAddedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -662,13 +662,12 @@ func TestIDPProjection_reduces(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), org.IDPOIDCConfigAddedEventMapper),
+ ), org.IDPOIDCConfigAddedEventMapper),
},
reduce: (&idpProjection{}).reduceOIDCConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -689,7 +688,7 @@ func TestIDPProjection_reduces(t *testing.T) {
"client-id",
anyArg{},
"issuer",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
domain.OIDCMappingFieldUnspecified,
domain.OIDCMappingFieldPreferredLoginName,
"https://api.zitadel.ch/authorize",
@@ -703,10 +702,11 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceOIDCConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPOIDCConfigChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPOIDCConfigChangedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"clientId": "client-id",
"clientSecret": {
@@ -721,13 +721,12 @@ func TestIDPProjection_reduces(t *testing.T) {
"idpDisplayNameMapping": 0,
"usernameMapping": 1
}`),
- ), org.IDPOIDCConfigChangedEventMapper),
+ ), org.IDPOIDCConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -747,7 +746,7 @@ func TestIDPProjection_reduces(t *testing.T) {
"issuer",
"https://api.zitadel.ch/authorize",
"https://api.zitadel.ch/token",
- database.StringArray{"profile"},
+ database.TextArray[string]{"profile"},
domain.OIDCMappingFieldUnspecified,
domain.OIDCMappingFieldPreferredLoginName,
"idp-config-id",
@@ -761,17 +760,17 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceOIDCConfigChanged: no op",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPOIDCConfigChangedEventType),
- org.AggregateType,
- []byte("{}"),
- ), org.IDPOIDCConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.IDPOIDCConfigChangedEventType,
+ org.AggregateType,
+ []byte("{}"),
+ ), org.IDPOIDCConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceOIDCConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -780,23 +779,23 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceJWTConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPJWTConfigAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPJWTConfigAddedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), org.IDPJWTConfigAddedEventMapper),
+ ), org.IDPJWTConfigAddedEventMapper),
},
reduce: (&idpProjection{}).reduceJWTConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -827,23 +826,23 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceJWTConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPJWTConfigChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPJWTConfigChangedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"jwtEndpoint": "https://api.zitadel.ch/jwt",
"issuer": "issuer",
"keysEndpoint": "https://api.zitadel.ch/keys",
"headerName": "hodor"
}`),
- ), org.IDPJWTConfigChangedEventMapper),
+ ), org.IDPJWTConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceJWTConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -873,17 +872,17 @@ func TestIDPProjection_reduces(t *testing.T) {
{
name: "org reduceJWTConfigChanged: no op",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPJWTConfigChangedEventType),
- org.AggregateType,
- []byte(`{}`),
- ), org.IDPJWTConfigChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.IDPJWTConfigChangedEventType,
+ org.AggregateType,
+ []byte(`{}`),
+ ), org.IDPJWTConfigChangedEventMapper),
},
reduce: (&idpProjection{}).reduceJWTConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -893,16 +892,16 @@ func TestIDPProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&idpProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/idp_user_link.go b/internal/query/projection/idp_user_link.go
index c4b15a36d7..ce588a20e1 100644
--- a/internal/query/projection/idp_user_link.go
+++ b/internal/query/projection/idp_user_link.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -26,41 +26,42 @@ const (
IDPUserLinkOwnerRemovedCol = "owner_removed"
)
-type idpUserLinkProjection struct {
- crdb.StatementHandler
+type idpUserLinkProjection struct{}
+
+func newIDPUserLinkProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(idpUserLinkProjection))
}
-func newIDPUserLinkProjection(ctx context.Context, config crdb.StatementHandlerConfig) *idpUserLinkProjection {
- p := new(idpUserLinkProjection)
- config.ProjectionName = IDPUserLinkTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(IDPUserLinkIDPIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPUserLinkUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPUserLinkExternalUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPUserLinkCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPUserLinkChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(IDPUserLinkSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(IDPUserLinkResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPUserLinkInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPUserLinkDisplayNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(IDPUserLinkOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*idpUserLinkProjection) Name() string {
+ return IDPUserLinkTable
+}
+
+func (*idpUserLinkProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(IDPUserLinkIDPIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPUserLinkUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPUserLinkExternalUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPUserLinkCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPUserLinkChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(IDPUserLinkSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(IDPUserLinkResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPUserLinkInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPUserLinkDisplayNameCol, handler.ColumnTypeText),
+ handler.NewColumn(IDPUserLinkOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(IDPUserLinkInstanceIDCol, IDPUserLinkIDPIDCol, IDPUserLinkExternalUserIDCol),
- crdb.WithIndex(crdb.NewIndex("user_id", []string{IDPUserLinkUserIDCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{IDPUserLinkOwnerRemovedCol})),
+ handler.NewPrimaryKey(IDPUserLinkInstanceIDCol, IDPUserLinkIDPIDCol, IDPUserLinkExternalUserIDCol),
+ handler.WithIndex(handler.NewIndex("user_id", []string{IDPUserLinkUserIDCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{IDPUserLinkOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *idpUserLinkProjection) reducers() []handler.AggregateReducer {
+func (p *idpUserLinkProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserIDPLinkAddedType,
Reduce: p.reduceAdded,
@@ -85,7 +86,7 @@ func (p *idpUserLinkProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.IDPConfigRemovedEventType,
Reduce: p.reduceIDPConfigRemoved,
@@ -98,7 +99,7 @@ func (p *idpUserLinkProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.IDPConfigRemovedEventType,
Reduce: p.reduceIDPConfigRemoved,
@@ -118,7 +119,7 @@ func (p *idpUserLinkProjection) reduceAdded(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-DpmXq", "reduce.wrong.event.type %s", user.UserIDPLinkAddedType)
}
- return crdb.NewCreateStatement(e,
+ return handler.NewCreateStatement(e,
[]handler.Column{
handler.NewCol(IDPUserLinkIDPIDCol, e.IDPConfigID),
handler.NewCol(IDPUserLinkUserIDCol, e.Aggregate().ID),
@@ -139,7 +140,7 @@ func (p *idpUserLinkProjection) reduceRemoved(event eventstore.Event) (*handler.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-AZmfJ", "reduce.wrong.event.type %s", user.UserIDPLinkRemovedType)
}
- return crdb.NewDeleteStatement(e,
+ return handler.NewDeleteStatement(e,
[]handler.Condition{
handler.NewCond(IDPUserLinkIDPIDCol, e.IDPConfigID),
handler.NewCond(IDPUserLinkUserIDCol, e.Aggregate().ID),
@@ -155,7 +156,7 @@ func (p *idpUserLinkProjection) reduceCascadeRemoved(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-jQpv9", "reduce.wrong.event.type %s", user.UserIDPLinkCascadeRemovedType)
}
- return crdb.NewDeleteStatement(e,
+ return handler.NewDeleteStatement(e,
[]handler.Condition{
handler.NewCond(IDPUserLinkIDPIDCol, e.IDPConfigID),
handler.NewCond(IDPUserLinkUserIDCol, e.Aggregate().ID),
@@ -171,7 +172,7 @@ func (p *idpUserLinkProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-PGiAY", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(IDPUserLinkResourceOwnerCol, e.Aggregate().ID),
@@ -186,7 +187,7 @@ func (p *idpUserLinkProjection) reduceUserRemoved(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uwlWE", "reduce.wrong.event.type %s", user.UserRemovedType)
}
- return crdb.NewDeleteStatement(e,
+ return handler.NewDeleteStatement(e,
[]handler.Condition{
handler.NewCond(IDPUserLinkUserIDCol, e.Aggregate().ID),
handler.NewCond(IDPUserLinkInstanceIDCol, e.Aggregate().InstanceID),
@@ -200,7 +201,7 @@ func (p *idpUserLinkProjection) reduceExternalIDMigrated(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-AS3th", "reduce.wrong.event.type %s", user.UserIDPExternalIDMigratedType)
}
- return crdb.NewUpdateStatement(e,
+ return handler.NewUpdateStatement(e,
[]handler.Column{
handler.NewCol(IDPUserLinkChangeDateCol, e.CreationDate()),
handler.NewCol(IDPUserLinkSequenceCol, e.Sequence()),
@@ -227,7 +228,7 @@ func (p *idpUserLinkProjection) reduceIDPConfigRemoved(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-iCKSj", "reduce.wrong.event.type %v", []eventstore.EventType{org.IDPConfigRemovedEventType, instance.IDPConfigRemovedEventType})
}
- return crdb.NewDeleteStatement(event,
+ return handler.NewDeleteStatement(event,
[]handler.Condition{
handler.NewCond(IDPUserLinkIDPIDCol, idpID),
handler.NewCond(IDPUserLinkResourceOwnerCol, event.Aggregate().ResourceOwner),
diff --git a/internal/query/projection/idp_user_link_test.go b/internal/query/projection/idp_user_link_test.go
index f518163e26..a5e860844f 100644
--- a/internal/query/projection/idp_user_link_test.go
+++ b/internal/query/projection/idp_user_link_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -25,21 +24,21 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserIDPLinkAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserIDPLinkAddedType,
+ user.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"userId": "external-user-id",
"displayName": "gigi@caos.ch"
}`),
- ), user.UserIDPLinkAddedEventMapper),
+ ), user.UserIDPLinkAddedEventMapper),
},
reduce: (&idpUserLinkProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -63,20 +62,20 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "reduceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserIDPLinkRemovedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserIDPLinkRemovedType,
+ user.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"userId": "external-user-id"
}`),
- ), user.UserIDPLinkRemovedEventMapper),
+ ), user.UserIDPLinkRemovedEventMapper),
},
reduce: (&idpUserLinkProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -95,20 +94,20 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "reduceCascadeRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserIDPLinkCascadeRemovedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserIDPLinkCascadeRemovedType,
+ user.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id",
"userId": "external-user-id"
}`),
- ), user.UserIDPLinkCascadeRemovedEventMapper),
+ ), user.UserIDPLinkCascadeRemovedEventMapper),
},
reduce: (&idpUserLinkProjection{}).reduceCascadeRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -127,17 +126,17 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "reduceOwnerRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- []byte(`{}`),
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ []byte(`{}`),
+ ), org.OrgRemovedEventMapper),
},
reduce: (&idpUserLinkProjection{}).reduceOwnerRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -154,17 +153,17 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(IDPUserLinkInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -180,17 +179,17 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "reduceUserRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&idpUserLinkProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -208,7 +207,7 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
name: "reduceExternalIDMigrated",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.UserIDPExternalIDMigratedType),
+ user.UserIDPExternalIDMigratedType,
user.AggregateType,
[]byte(`{
"idpConfigId": "idp-config-id",
@@ -219,9 +218,8 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
},
reduce: (&idpUserLinkProjection{}).reduceExternalIDMigrated,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -243,19 +241,19 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "org IDPConfigRemovedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.IDPConfigRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.IDPConfigRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), org.IDPConfigRemovedEventMapper),
+ ), org.IDPConfigRemovedEventMapper),
},
reduce: (&idpUserLinkProjection{}).reduceIDPConfigRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -273,19 +271,19 @@ func TestIDPUserLinkProjection_reduces(t *testing.T) {
{
name: "iam IDPConfigRemovedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.IDPConfigRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.IDPConfigRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"idpConfigId": "idp-config-id"
}`),
- ), instance.IDPConfigRemovedEventMapper),
+ ), instance.IDPConfigRemovedEventMapper),
},
reduce: (&idpUserLinkProjection{}).reduceIDPConfigRemoved,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/instance.go b/internal/query/projection/instance.go
index 43c0d84e19..68a1106064 100644
--- a/internal/query/projection/instance.go
+++ b/internal/query/projection/instance.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -25,39 +25,40 @@ const (
InstanceColumnDefaultLanguage = "default_language"
)
-type instanceProjection struct {
- crdb.StatementHandler
+type instanceProjection struct{}
+
+func newInstanceProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(instanceProjection))
}
-func newInstanceProjection(ctx context.Context, config crdb.StatementHandlerConfig) *instanceProjection {
- p := new(instanceProjection)
- config.ProjectionName = InstanceProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(InstanceColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(InstanceColumnName, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(InstanceColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(InstanceColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(InstanceColumnDefaultOrgID, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(InstanceColumnProjectID, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(InstanceColumnConsoleID, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(InstanceColumnConsoleAppID, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(InstanceColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(InstanceColumnDefaultLanguage, crdb.ColumnTypeText, crdb.Default("")),
+func (*instanceProjection) Name() string {
+ return InstanceProjectionTable
+}
+
+func (*instanceProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(InstanceColumnID, handler.ColumnTypeText),
+ handler.NewColumn(InstanceColumnName, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(InstanceColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(InstanceColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(InstanceColumnDefaultOrgID, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(InstanceColumnProjectID, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(InstanceColumnConsoleID, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(InstanceColumnConsoleAppID, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(InstanceColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(InstanceColumnDefaultLanguage, handler.ColumnTypeText, handler.Default("")),
},
- crdb.NewPrimaryKey(InstanceColumnID),
+ handler.NewPrimaryKey(InstanceColumnID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *instanceProjection) reducers() []handler.AggregateReducer {
+func (p *instanceProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceAddedEventType,
Reduce: p.reduceInstanceAdded,
@@ -96,7 +97,7 @@ func (p *instanceProjection) reduceInstanceAdded(event eventstore.Event) (*handl
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-29nlS", "reduce.wrong.event.type %s", instance.InstanceAddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(InstanceColumnID, e.Aggregate().InstanceID),
@@ -114,7 +115,7 @@ func reduceInstanceRemovedHelper(instanceIDCol string) func(event eventstore.Eve
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-22nlS", "reduce.wrong.event.type %s", instance.InstanceRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(instanceIDCol, e.Aggregate().ID),
@@ -128,7 +129,7 @@ func (p *instanceProjection) reduceInstanceChanged(event eventstore.Event) (*han
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-so2am1", "reduce.wrong.event.type %s", instance.InstanceChangedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(InstanceColumnName, e.Name),
@@ -146,7 +147,7 @@ func (p *instanceProjection) reduceDefaultOrgSet(event eventstore.Event) (*handl
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-2n9f2", "reduce.wrong.event.type %s", instance.DefaultOrgSetEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(InstanceColumnChangeDate, e.CreationDate()),
@@ -164,7 +165,7 @@ func (p *instanceProjection) reduceIAMProjectSet(event eventstore.Event) (*handl
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-30o0e", "reduce.wrong.event.type %s", instance.ProjectSetEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(InstanceColumnChangeDate, e.CreationDate()),
@@ -182,7 +183,7 @@ func (p *instanceProjection) reduceConsoleSet(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Dgf11", "reduce.wrong.event.type %s", instance.ConsoleSetEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(InstanceColumnChangeDate, e.CreationDate()),
@@ -201,7 +202,7 @@ func (p *instanceProjection) reduceDefaultLanguageSet(event eventstore.Event) (*
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-30o0e", "reduce.wrong.event.type %s", instance.DefaultLanguageSetEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(InstanceColumnChangeDate, e.CreationDate()),
diff --git a/internal/query/projection/instance_domain.go b/internal/query/projection/instance_domain.go
index 18eded8cc9..8eff389ce1 100644
--- a/internal/query/projection/instance_domain.go
+++ b/internal/query/projection/instance_domain.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -22,37 +22,42 @@ const (
InstanceDomainIsPrimaryCol = "is_primary"
)
-type instanceDomainProjection struct {
- crdb.StatementHandler
+type instanceDomainProjection struct{}
+
+func newInstanceDomainProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(instanceDomainProjection))
}
-func newInstanceDomainProjection(ctx context.Context, config crdb.StatementHandlerConfig) *instanceDomainProjection {
- p := new(instanceDomainProjection)
- config.ProjectionName = InstanceDomainTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(InstanceDomainInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(InstanceDomainCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(InstanceDomainChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(InstanceDomainSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(InstanceDomainDomainCol, crdb.ColumnTypeText),
- crdb.NewColumn(InstanceDomainIsGeneratedCol, crdb.ColumnTypeBool),
- crdb.NewColumn(InstanceDomainIsPrimaryCol, crdb.ColumnTypeBool),
+func (*instanceDomainProjection) Name() string {
+ return InstanceDomainTable
+}
+
+func (*instanceDomainProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(InstanceDomainInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(InstanceDomainCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(InstanceDomainChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(InstanceDomainSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(InstanceDomainDomainCol, handler.ColumnTypeText),
+ handler.NewColumn(InstanceDomainIsGeneratedCol, handler.ColumnTypeBool),
+ handler.NewColumn(InstanceDomainIsPrimaryCol, handler.ColumnTypeBool),
},
- crdb.NewPrimaryKey(InstanceDomainInstanceIDCol, InstanceDomainDomainCol),
- crdb.WithIndex(crdb.NewIndex("instance_domain", []string{InstanceDomainDomainCol})),
+ handler.NewPrimaryKey(InstanceDomainInstanceIDCol, InstanceDomainDomainCol),
+ handler.WithIndex(
+ handler.NewIndex("instance_domain", []string{InstanceDomainDomainCol},
+ handler.WithInclude(InstanceDomainCreationDateCol, InstanceDomainChangeDateCol, InstanceDomainSequenceCol, InstanceDomainIsGeneratedCol, InstanceDomainIsPrimaryCol),
+ ),
+ ),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *instanceDomainProjection) reducers() []handler.AggregateReducer {
+func (p *instanceDomainProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceDomainAddedEventType,
Reduce: p.reduceDomainAdded,
@@ -79,7 +84,7 @@ func (p *instanceDomainProjection) reduceDomainAdded(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-38nNf", "reduce.wrong.event.type %s", instance.InstanceDomainAddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(InstanceDomainCreationDateCol, e.CreationDate()),
@@ -98,9 +103,9 @@ func (p *instanceDomainProjection) reduceDomainPrimarySet(event eventstore.Event
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-f8nlw", "reduce.wrong.event.type %s", instance.InstanceDomainPrimarySetEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(InstanceDomainChangeDateCol, e.CreationDate()),
handler.NewCol(InstanceDomainSequenceCol, e.Sequence()),
@@ -111,7 +116,7 @@ func (p *instanceDomainProjection) reduceDomainPrimarySet(event eventstore.Event
handler.NewCond(InstanceDomainIsPrimaryCol, true),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(InstanceDomainChangeDateCol, e.CreationDate()),
handler.NewCol(InstanceDomainSequenceCol, e.Sequence()),
@@ -130,7 +135,7 @@ func (p *instanceDomainProjection) reduceDomainRemoved(event eventstore.Event) (
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-388Nk", "reduce.wrong.event.type %s", instance.InstanceDomainRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(InstanceDomainDomainCol, e.Domain),
diff --git a/internal/query/projection/instance_domain_test.go b/internal/query/projection/instance_domain_test.go
index 0106bbe85a..7997bc0a8b 100644
--- a/internal/query/projection/instance_domain_test.go
+++ b/internal/query/projection/instance_domain_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -23,17 +22,17 @@ func TestInstanceDomainProjection_reduces(t *testing.T) {
{
name: "reduceDomainAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceDomainAddedEventType),
- instance.AggregateType,
- []byte(`{"domain": "domain.new", "generated": true}`),
- ), instance.DomainAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceDomainAddedEventType,
+ instance.AggregateType,
+ []byte(`{"domain": "domain.new", "generated": true}`),
+ ), instance.DomainAddedEventMapper),
},
reduce: (&instanceDomainProjection{}).reduceDomainAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -55,17 +54,17 @@ func TestInstanceDomainProjection_reduces(t *testing.T) {
{
name: "reduceDomainRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceDomainRemovedEventType),
- instance.AggregateType,
- []byte(`{"domain": "domain.new"}`),
- ), instance.DomainRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceDomainRemovedEventType,
+ instance.AggregateType,
+ []byte(`{"domain": "domain.new"}`),
+ ), instance.DomainRemovedEventMapper),
},
reduce: (&instanceDomainProjection{}).reduceDomainRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -82,17 +81,17 @@ func TestInstanceDomainProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(InstanceDomainInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/instance_member.go b/internal/query/projection/instance_member.go
index 950327f2d2..bf9daba6f5 100644
--- a/internal/query/projection/instance_member.go
+++ b/internal/query/projection/instance_member.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -19,31 +19,46 @@ const (
)
type instanceMemberProjection struct {
- crdb.StatementHandler
+ es handler.EventStore
}
-func newInstanceMemberProjection(ctx context.Context, config crdb.StatementHandlerConfig) *instanceMemberProjection {
- p := new(instanceMemberProjection)
- config.ProjectionName = InstanceMemberProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable(
- append(memberColumns, crdb.NewColumn(InstanceColumnID, crdb.ColumnTypeText)),
- crdb.NewPrimaryKey(MemberInstanceID, InstanceColumnID, MemberUserIDCol),
- crdb.WithIndex(crdb.NewIndex("user_id", []string{MemberUserIDCol})),
- crdb.WithIndex(crdb.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
+func newInstanceMemberProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, &instanceMemberProjection{es: config.Eventstore})
+}
+
+func (*instanceMemberProjection) Name() string {
+ return InstanceMemberProjectionTable
+}
+
+func (*instanceMemberProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable(
+ append(memberColumns, handler.NewColumn(InstanceColumnID, handler.ColumnTypeText)),
+ handler.NewPrimaryKey(MemberInstanceID, InstanceColumnID, MemberUserIDCol),
+ handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
+ handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
+ handler.WithIndex(
+ handler.NewIndex("im_instance", []string{MemberInstanceID},
+ handler.WithInclude(
+ MemberCreationDate,
+ MemberChangeDate,
+ MemberUserOwnerRemoved,
+ MemberRolesCol,
+ MemberSequence,
+ MemberResourceOwner,
+ MemberOwnerRemoved,
+ ),
+ ),
+ ),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *instanceMemberProjection) reducers() []handler.AggregateReducer {
+func (p *instanceMemberProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.MemberAddedEventType,
Reduce: p.reduceAdded,
@@ -68,7 +83,7 @@ func (p *instanceMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceUserOwnerRemoved,
@@ -77,7 +92,7 @@ func (p *instanceMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserRemovedType,
Reduce: p.reduceUserRemoved,
@@ -93,7 +108,7 @@ func (p *instanceMemberProjection) reduceAdded(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-pGNCu", "reduce.wrong.event.type %s", instance.MemberAddedEventType)
}
ctx := setMemberContext(e.Aggregate())
- userOwner, err := getResourceOwnerOfUser(ctx, p.Eventstore, e.Aggregate().InstanceID, e.UserID)
+ userOwner, err := getResourceOwnerOfUser(ctx, p.es, e.Aggregate().InstanceID, e.UserID)
if err != nil {
return nil, err
}
diff --git a/internal/query/projection/instance_member_test.go b/internal/query/projection/instance_member_test.go
index 33c277f6c4..bc1605aa17 100644
--- a/internal/query/projection/instance_member_test.go
+++ b/internal/query/projection/instance_member_test.go
@@ -10,8 +10,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -30,34 +29,37 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
{
name: "instance MemberAddedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.MemberAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.MemberAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role"]
}`),
- ), instance.MemberAddedEventMapper),
+ ), instance.MemberAddedEventMapper),
},
reduce: (&instanceMemberProjection{
- StatementHandler: getStatementHandlerWithFilters(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user-id", "org1").Aggregate,
- "username1",
- "firstname1",
- "lastname1",
- "nickname1",
- "displayname1",
- language.German,
- domain.GenderMale,
- "email1",
- true,
- ),
- )(t)}).reduceAdded,
+ es: newMockEventStore().appendFilterResponse(
+ []eventstore.Event{
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user-id", "org1").Aggregate,
+ "username1",
+ "firstname1",
+ "lastname1",
+ "nickname1",
+ "displayname1",
+ language.German,
+ domain.GenderMale,
+ "email1",
+ true,
+ ),
+ },
+ ),
+ }).reduceAdded,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -66,7 +68,7 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
"user-id",
"org1",
false,
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
@@ -83,26 +85,26 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
{
name: "instance MemberChangedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.MemberChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.MemberChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role", "changed"]
}`),
- ), instance.MemberChangedEventMapper),
+ ), instance.MemberChangedEventMapper),
},
reduce: (&instanceMemberProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.instance_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5)",
expectedArgs: []interface{}{
- database.StringArray{"role", "changed"},
+ database.TextArray[string]{"role", "changed"},
anyArg{},
uint64(15),
"instance-id",
@@ -116,19 +118,19 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
{
name: "instance MemberCascadeRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.MemberCascadeRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.MemberCascadeRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"userId": "user-id"
}`),
- ), instance.MemberCascadeRemovedEventMapper),
+ ), instance.MemberCascadeRemovedEventMapper),
},
reduce: (&instanceMemberProjection{}).reduceCascadeRemoved,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -145,19 +147,19 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
{
name: "instance MemberRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.MemberRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.MemberRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"userId": "user-id"
}`),
- ), instance.MemberRemovedEventMapper),
+ ), instance.MemberRemovedEventMapper),
},
reduce: (&instanceMemberProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: instance.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: instance.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -174,17 +176,17 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
{
name: "user UserRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&instanceMemberProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -201,17 +203,17 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
{
name: "org.OrgRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
reduce: (&instanceMemberProjection{}).reduceUserOwnerRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -228,17 +230,17 @@ func TestInstanceMemberProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MemberInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/instance_test.go b/internal/query/projection/instance_test.go
index 8287c36694..274e28f3f9 100644
--- a/internal/query/projection/instance_test.go
+++ b/internal/query/projection/instance_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -23,17 +22,17 @@ func TestInstanceProjection_reduces(t *testing.T) {
{
name: "reduceInstanceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceAddedEventType),
- instance.AggregateType,
- []byte(`{"name": "Name"}`),
- ), instance.InstanceAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceAddedEventType,
+ instance.AggregateType,
+ []byte(`{"name": "Name"}`),
+ ), instance.InstanceAddedEventMapper),
},
reduce: (&instanceProjection{}).reduceInstanceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -53,17 +52,17 @@ func TestInstanceProjection_reduces(t *testing.T) {
{
name: "reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(InstanceColumnID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -79,17 +78,17 @@ func TestInstanceProjection_reduces(t *testing.T) {
{
name: "reduceDefaultOrgSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DefaultOrgSetEventType),
- instance.AggregateType,
- []byte(`{"orgId": "orgid"}`),
- ), instance.DefaultOrgSetMapper),
+ event: getEvent(
+ testEvent(
+ instance.DefaultOrgSetEventType,
+ instance.AggregateType,
+ []byte(`{"orgId": "orgid"}`),
+ ), instance.DefaultOrgSetMapper),
},
reduce: (&instanceProjection{}).reduceDefaultOrgSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -108,17 +107,17 @@ func TestInstanceProjection_reduces(t *testing.T) {
{
name: "reduceProjectIDSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.ProjectSetEventType),
- instance.AggregateType,
- []byte(`{"iamProjectId": "project-id"}`),
- ), instance.ProjectSetMapper),
+ event: getEvent(
+ testEvent(
+ instance.ProjectSetEventType,
+ instance.AggregateType,
+ []byte(`{"iamProjectId": "project-id"}`),
+ ), instance.ProjectSetMapper),
},
reduce: (&instanceProjection{}).reduceIAMProjectSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -137,17 +136,17 @@ func TestInstanceProjection_reduces(t *testing.T) {
{
name: "reduceDefaultLanguageSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DefaultLanguageSetEventType),
- instance.AggregateType,
- []byte(`{"language": "en"}`),
- ), instance.DefaultLanguageSetMapper),
+ event: getEvent(
+ testEvent(
+ instance.DefaultLanguageSetEventType,
+ instance.AggregateType,
+ []byte(`{"language": "en"}`),
+ ), instance.DefaultLanguageSetMapper),
},
reduce: (&instanceProjection{}).reduceDefaultLanguageSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/key.go b/internal/query/projection/key.go
index fabc768121..d15cb62ea7 100644
--- a/internal/query/projection/key.go
+++ b/internal/query/projection/key.go
@@ -7,8 +7,8 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/keypair"
)
@@ -48,71 +48,74 @@ const (
)
type keyProjection struct {
- crdb.StatementHandler
encryptionAlgorithm crypto.EncryptionAlgorithm
certEncryptionAlgorithm crypto.EncryptionAlgorithm
}
-func newKeyProjection(ctx context.Context, config crdb.StatementHandlerConfig, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, certEncryptionAlgorithm crypto.EncryptionAlgorithm) *keyProjection {
- p := new(keyProjection)
- config.ProjectionName = KeyProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(KeyColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(KeyColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(KeyColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(KeyColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(KeyColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(KeyColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(KeyColumnAlgorithm, crdb.ColumnTypeText, crdb.Default("")),
- crdb.NewColumn(KeyColumnUse, crdb.ColumnTypeEnum, crdb.Default(0)),
- },
- crdb.NewPrimaryKey(KeyColumnInstanceID, KeyColumnID),
- ),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(KeyPrivateColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(KeyPrivateColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(KeyPrivateColumnExpiry, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(KeyPrivateColumnKey, crdb.ColumnTypeJSONB),
- },
- crdb.NewPrimaryKey(KeyPrivateColumnInstanceID, KeyPrivateColumnID),
- privateKeyTableSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- ),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(KeyPublicColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(KeyPublicColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(KeyPublicColumnExpiry, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(KeyPublicColumnKey, crdb.ColumnTypeBytes),
- },
- crdb.NewPrimaryKey(KeyPublicColumnInstanceID, KeyPublicColumnID),
- publicKeyTableSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- ),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(CertificateColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(CertificateColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(CertificateColumnExpiry, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(CertificateColumnCertificate, crdb.ColumnTypeBytes),
- },
- crdb.NewPrimaryKey(CertificateColumnInstanceID, CertificateColumnID),
- certificateTableSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- ),
- )
- p.encryptionAlgorithm = keyEncryptionAlgorithm
- p.certEncryptionAlgorithm = certEncryptionAlgorithm
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
-
- return p
+func newKeyProjection(ctx context.Context, config handler.Config, keyEncryptionAlgorithm, certEncryptionAlgorithm crypto.EncryptionAlgorithm) *handler.Handler {
+ p := &keyProjection{
+ encryptionAlgorithm: keyEncryptionAlgorithm,
+ certEncryptionAlgorithm: certEncryptionAlgorithm,
+ }
+ return handler.NewHandler(ctx, &config, p)
}
-func (p *keyProjection) reducers() []handler.AggregateReducer {
+func (*keyProjection) Name() string {
+ return KeyProjectionTable
+}
+
+func (*keyProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(KeyColumnID, handler.ColumnTypeText),
+ handler.NewColumn(KeyColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(KeyColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(KeyColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(KeyColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(KeyColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(KeyColumnAlgorithm, handler.ColumnTypeText, handler.Default("")),
+ handler.NewColumn(KeyColumnUse, handler.ColumnTypeEnum, handler.Default(0)),
+ },
+ handler.NewPrimaryKey(KeyColumnInstanceID, KeyColumnID),
+ ),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(KeyPrivateColumnID, handler.ColumnTypeText),
+ handler.NewColumn(KeyPrivateColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(KeyPrivateColumnExpiry, handler.ColumnTypeTimestamp),
+ handler.NewColumn(KeyPrivateColumnKey, handler.ColumnTypeJSONB),
+ },
+ handler.NewPrimaryKey(KeyPrivateColumnInstanceID, KeyPrivateColumnID),
+ privateKeyTableSuffix,
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ ),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(KeyPublicColumnID, handler.ColumnTypeText),
+ handler.NewColumn(KeyPublicColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(KeyPublicColumnExpiry, handler.ColumnTypeTimestamp),
+ handler.NewColumn(KeyPublicColumnKey, handler.ColumnTypeBytes),
+ },
+ handler.NewPrimaryKey(KeyPublicColumnInstanceID, KeyPublicColumnID),
+ publicKeyTableSuffix,
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ ),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(CertificateColumnID, handler.ColumnTypeText),
+ handler.NewColumn(CertificateColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(CertificateColumnExpiry, handler.ColumnTypeTimestamp),
+ handler.NewColumn(CertificateColumnCertificate, handler.ColumnTypeBytes),
+ },
+ handler.NewPrimaryKey(CertificateColumnInstanceID, CertificateColumnID),
+ certificateTableSuffix,
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ ),
+ )
+}
+
+func (p *keyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: keypair.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: keypair.AddedEventType,
Reduce: p.reduceKeyPairAdded,
@@ -125,7 +128,7 @@ func (p *keyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(KeyColumnInstanceID),
@@ -141,10 +144,10 @@ func (p *keyProjection) reduceKeyPairAdded(event eventstore.Event) (*handler.Sta
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SAbr2", "reduce.wrong.event.type %s", keypair.AddedEventType)
}
if e.PrivateKey.Expiry.Before(time.Now()) && e.PublicKey.Expiry.Before(time.Now()) {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
- creates := []func(eventstore.Event) crdb.Exec{
- crdb.AddCreateStatement(
+ creates := []func(eventstore.Event) handler.Exec{
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(KeyColumnID, e.Aggregate().ID),
handler.NewCol(KeyColumnCreationDate, e.CreationDate()),
@@ -158,14 +161,14 @@ func (p *keyProjection) reduceKeyPairAdded(event eventstore.Event) (*handler.Sta
),
}
if e.PrivateKey.Expiry.After(time.Now()) {
- creates = append(creates, crdb.AddCreateStatement(
+ creates = append(creates, handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(KeyPrivateColumnID, e.Aggregate().ID),
handler.NewCol(KeyPrivateColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCol(KeyPrivateColumnExpiry, e.PrivateKey.Expiry),
handler.NewCol(KeyPrivateColumnKey, e.PrivateKey.Key),
},
- crdb.WithTableSuffix(privateKeyTableSuffix),
+ handler.WithTableSuffix(privateKeyTableSuffix),
))
}
if e.PublicKey.Expiry.After(time.Now()) {
@@ -173,18 +176,18 @@ func (p *keyProjection) reduceKeyPairAdded(event eventstore.Event) (*handler.Sta
if err != nil {
return nil, errors.ThrowInternal(err, "HANDL-DAg2f", "cannot decrypt public key")
}
- creates = append(creates, crdb.AddCreateStatement(
+ creates = append(creates, handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(KeyPublicColumnID, e.Aggregate().ID),
handler.NewCol(KeyPublicColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCol(KeyPublicColumnExpiry, e.PublicKey.Expiry),
handler.NewCol(KeyPublicColumnKey, publicKey),
},
- crdb.WithTableSuffix(publicKeyTableSuffix),
+ handler.WithTableSuffix(publicKeyTableSuffix),
))
}
- return crdb.NewMultiStatement(e, creates...), nil
+ return handler.NewMultiStatement(e, creates...), nil
}
func (p *keyProjection) reduceCertificateAdded(event eventstore.Event) (*handler.Statement, error) {
@@ -194,7 +197,7 @@ func (p *keyProjection) reduceCertificateAdded(event eventstore.Event) (*handler
}
if e.Certificate.Expiry.Before(time.Now()) {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
certificate, err := crypto.Decrypt(e.Certificate.Key, p.certEncryptionAlgorithm)
@@ -202,15 +205,15 @@ func (p *keyProjection) reduceCertificateAdded(event eventstore.Event) (*handler
return nil, errors.ThrowInternal(err, "HANDL-Dajwig2f", "cannot decrypt certificate")
}
- creates := []func(eventstore.Event) crdb.Exec{crdb.AddCreateStatement(
+ creates := []func(eventstore.Event) handler.Exec{handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(CertificateColumnID, e.Aggregate().ID),
handler.NewCol(CertificateColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCol(CertificateColumnExpiry, e.Certificate.Expiry),
handler.NewCol(CertificateColumnCertificate, certificate),
},
- crdb.WithTableSuffix(certificateTableSuffix),
+ handler.WithTableSuffix(certificateTableSuffix),
)}
- return crdb.NewMultiStatement(e, creates...), nil
+ return handler.NewMultiStatement(e, creates...), nil
}
diff --git a/internal/query/projection/key_test.go b/internal/query/projection/key_test.go
index 2c93e38594..d6482ec7fe 100644
--- a/internal/query/projection/key_test.go
+++ b/internal/query/projection/key_test.go
@@ -11,8 +11,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/keypair"
)
@@ -30,17 +29,17 @@ func TestKeyProjection_reduces(t *testing.T) {
{
name: "reduceKeyPairAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(keypair.AddedEventType),
- keypair.AggregateType,
- keypairAddedEventData(domain.KeyUsageSigning, time.Now().Add(time.Hour)),
- ), keypair.AddedEventMapper),
+ event: getEvent(
+ testEvent(
+ keypair.AddedEventType,
+ keypair.AggregateType,
+ keypairAddedEventData(domain.KeyUsageSigning, time.Now().Add(time.Hour)),
+ ), keypair.AddedEventMapper),
},
reduce: (&keyProjection{encryptionAlgorithm: crypto.CreateMockEncryptionAlg(gomock.NewController(t))}).reduceKeyPairAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("key_pair"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("key_pair"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -86,34 +85,34 @@ func TestKeyProjection_reduces(t *testing.T) {
{
name: "reduceKeyPairAdded expired",
args: args{
- event: getEvent(testEvent(
- repository.EventType(keypair.AddedEventType),
- keypair.AggregateType,
- keypairAddedEventData(domain.KeyUsageSigning, time.Now().Add(-time.Hour)),
- ), keypair.AddedEventMapper),
+ event: getEvent(
+ testEvent(
+ keypair.AddedEventType,
+ keypair.AggregateType,
+ keypairAddedEventData(domain.KeyUsageSigning, time.Now().Add(-time.Hour)),
+ ), keypair.AddedEventMapper),
},
reduce: (&keyProjection{}).reduceKeyPairAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("key_pair"),
- sequence: 15,
- previousSequence: 10,
- executer: &testExecuter{},
+ aggregateType: eventstore.AggregateType("key_pair"),
+ sequence: 15,
+ executer: &testExecuter{},
},
},
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(KeyColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -129,17 +128,17 @@ func TestKeyProjection_reduces(t *testing.T) {
{
name: "reduceCertificateAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(keypair.AddedCertificateEventType),
- keypair.AggregateType,
- certificateAddedEventData(domain.KeyUsageSAMLMetadataSigning, time.Now().Add(time.Hour)),
- ), keypair.AddedCertificateEventMapper),
+ event: getEvent(
+ testEvent(
+ keypair.AddedCertificateEventType,
+ keypair.AggregateType,
+ certificateAddedEventData(domain.KeyUsageSAMLMetadataSigning, time.Now().Add(time.Hour)),
+ ), keypair.AddedCertificateEventMapper),
},
reduce: (&keyProjection{certEncryptionAlgorithm: crypto.CreateMockEncryptionAlg(gomock.NewController(t))}).reduceCertificateAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("key_pair"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("key_pair"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/label_policy.go b/internal/query/projection/label_policy.go
index fb3cd221af..f8f6b03d5d 100644
--- a/internal/query/projection/label_policy.go
+++ b/internal/query/projection/label_policy.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -45,55 +45,56 @@ const (
LabelPolicyDarkIconURLCol = "dark_icon_url"
)
-type labelPolicyProjection struct {
- crdb.StatementHandler
+type labelPolicyProjection struct{}
+
+func newLabelPolicyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(labelPolicyProjection))
}
-func newLabelPolicyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *labelPolicyProjection {
- p := new(labelPolicyProjection)
- config.ProjectionName = LabelPolicyTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(LabelPolicyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LabelPolicyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(LabelPolicyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(LabelPolicySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(LabelPolicyStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(LabelPolicyIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LabelPolicyResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(LabelPolicyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LabelPolicyHideLoginNameSuffixCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LabelPolicyWatermarkDisabledCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LabelPolicyShouldErrorPopupCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LabelPolicyFontURLCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyLightPrimaryColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyLightWarnColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyLightBackgroundColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyLightFontColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyLightLogoURLCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyLightIconURLCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyDarkPrimaryColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyDarkWarnColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyDarkBackgroundColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyDarkFontColorCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyDarkLogoURLCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyDarkIconURLCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(LabelPolicyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*labelPolicyProjection) Name() string {
+ return LabelPolicyTable
+}
+
+func (*labelPolicyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(LabelPolicyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LabelPolicyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(LabelPolicyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(LabelPolicySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(LabelPolicyStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(LabelPolicyIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LabelPolicyResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(LabelPolicyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LabelPolicyHideLoginNameSuffixCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LabelPolicyWatermarkDisabledCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LabelPolicyShouldErrorPopupCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LabelPolicyFontURLCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyLightPrimaryColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyLightWarnColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyLightBackgroundColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyLightFontColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyLightLogoURLCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyLightIconURLCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyDarkPrimaryColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyDarkWarnColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyDarkBackgroundColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyDarkFontColorCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyDarkLogoURLCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyDarkIconURLCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(LabelPolicyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(LabelPolicyInstanceIDCol, LabelPolicyIDCol, LabelPolicyStateCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{LabelPolicyOwnerRemovedCol})),
+ handler.NewPrimaryKey(LabelPolicyInstanceIDCol, LabelPolicyIDCol, LabelPolicyStateCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{LabelPolicyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *labelPolicyProjection) reducers() []handler.AggregateReducer {
+func (p *labelPolicyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.LabelPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -162,7 +163,7 @@ func (p *labelPolicyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.LabelPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -241,11 +242,11 @@ func (p *labelPolicyProjection) reduceAdded(event eventstore.Event) (*handler.St
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-CSE7A", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyAddedEventType, instance.LabelPolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&policyEvent,
[]handler.Column{
- handler.NewCol(LabelPolicyCreationDateCol, policyEvent.CreationDate()),
- handler.NewCol(LabelPolicyChangeDateCol, policyEvent.CreationDate()),
+ handler.NewCol(LabelPolicyCreationDateCol, policyEvent.CreatedAt()),
+ handler.NewCol(LabelPolicyChangeDateCol, policyEvent.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, policyEvent.Sequence()),
handler.NewCol(LabelPolicyIDCol, policyEvent.Aggregate().ID),
handler.NewCol(LabelPolicyStateCol, domain.LabelPolicyStatePreview),
@@ -277,7 +278,7 @@ func (p *labelPolicyProjection) reduceChanged(event eventstore.Event) (*handler.
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-qgVug", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyChangedEventType, instance.LabelPolicyChangedEventType})
}
cols := []handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, policyEvent.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, policyEvent.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, policyEvent.Sequence()),
}
if policyEvent.PrimaryColor != nil {
@@ -313,7 +314,7 @@ func (p *labelPolicyProjection) reduceChanged(event eventstore.Event) (*handler.
if policyEvent.DisableWatermark != nil {
cols = append(cols, handler.NewCol(LabelPolicyWatermarkDisabledCol, *policyEvent.DisableWatermark))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -328,7 +329,7 @@ func (p *labelPolicyProjection) reduceRemoved(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-ATMBz", "reduce.wrong.event.type %s", org.LabelPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(LabelPolicyIDCol, policyEvent.Aggregate().ID),
@@ -343,7 +344,7 @@ func (p *labelPolicyProjection) reduceActivated(event eventstore.Event) (*handle
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-dldEU", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyActivatedEventType, instance.LabelPolicyActivatedEventType})
}
- return crdb.NewCopyStatement(
+ return handler.NewCopyStatement(
event,
[]handler.Column{
handler.NewCol(LabelPolicyInstanceIDCol, nil),
@@ -351,7 +352,7 @@ func (p *labelPolicyProjection) reduceActivated(event eventstore.Event) (*handle
handler.NewCol(LabelPolicyStateCol, nil),
},
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
handler.NewCol(LabelPolicyStateCol, domain.LabelPolicyStateActive),
handler.NewCol(LabelPolicyCreationDateCol, nil),
@@ -424,10 +425,10 @@ func (p *labelPolicyProjection) reduceLogoAdded(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-4wbOI", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyLogoAddedEventType, instance.LabelPolicyLogoAddedEventType, org.LabelPolicyLogoDarkAddedEventType, instance.LabelPolicyLogoDarkAddedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
storeKey,
},
@@ -453,10 +454,10 @@ func (p *labelPolicyProjection) reduceLogoRemoved(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-kg8H4", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyLogoRemovedEventType, instance.LabelPolicyLogoRemovedEventType, org.LabelPolicyLogoDarkRemovedEventType, instance.LabelPolicyLogoDarkRemovedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
handler.NewCol(col, nil),
},
@@ -482,10 +483,10 @@ func (p *labelPolicyProjection) reduceIconAdded(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-e2JFz", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyIconAddedEventType, instance.LabelPolicyIconAddedEventType, org.LabelPolicyIconDarkAddedEventType, instance.LabelPolicyIconDarkAddedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
storeKey,
},
@@ -511,10 +512,10 @@ func (p *labelPolicyProjection) reduceIconRemoved(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-gfgbY", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyIconRemovedEventType, instance.LabelPolicyIconRemovedEventType, org.LabelPolicyIconDarkRemovedEventType, instance.LabelPolicyIconDarkRemovedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
handler.NewCol(col, nil),
},
@@ -536,10 +537,10 @@ func (p *labelPolicyProjection) reduceFontAdded(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-65i9W", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyFontAddedEventType, instance.LabelPolicyFontAddedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
storeKey,
},
@@ -561,10 +562,10 @@ func (p *labelPolicyProjection) reduceFontRemoved(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-xf32J", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyFontRemovedEventType, instance.LabelPolicyFontRemovedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
handler.NewCol(col, nil),
},
@@ -583,10 +584,10 @@ func (p *labelPolicyProjection) reduceAssetsRemoved(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-qi39A", "reduce.wrong.event.type %v", []eventstore.EventType{org.LabelPolicyAssetsRemovedEventType, instance.LabelPolicyAssetsRemovedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(LabelPolicyChangeDateCol, event.CreationDate()),
+ handler.NewCol(LabelPolicyChangeDateCol, event.CreatedAt()),
handler.NewCol(LabelPolicySequenceCol, event.Sequence()),
handler.NewCol(LabelPolicyLightLogoURLCol, nil),
handler.NewCol(LabelPolicyLightIconURLCol, nil),
@@ -607,7 +608,7 @@ func (p *labelPolicyProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Su6pX", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(LabelPolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/label_policy_test.go b/internal/query/projection/label_policy_test.go
index c046bb01dd..553b67fc38 100644
--- a/internal/query/projection/label_policy_test.go
+++ b/internal/query/projection/label_policy_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,17 +24,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyAddedEventType),
- org.AggregateType,
- []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b"}`),
- ), org.LabelPolicyAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b"}`),
+ ), org.LabelPolicyAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -69,17 +68,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyChangedEventType),
- org.AggregateType,
- []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b"}`),
- ), org.LabelPolicyChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b"}`),
+ ), org.LabelPolicyChangedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -103,17 +102,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.LabelPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.LabelPolicyRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -130,17 +129,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(LabelPolicyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -156,17 +155,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceActivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyActivatedEventType),
- org.AggregateType,
- nil,
- ), org.LabelPolicyActivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyActivatedEventType,
+ org.AggregateType,
+ nil,
+ ), org.LabelPolicyActivatedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceActivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -187,17 +186,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceLogoAdded light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyLogoAddedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), org.LabelPolicyLogoAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyLogoAddedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), org.LabelPolicyLogoAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -218,17 +217,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceLogoAdded dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyLogoDarkAddedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), org.LabelPolicyLogoDarkAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyLogoDarkAddedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), org.LabelPolicyLogoDarkAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -249,17 +248,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceIconAdded light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyIconAddedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), org.LabelPolicyIconAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyIconAddedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), org.LabelPolicyIconAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -280,17 +279,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceIconAdded dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyIconDarkAddedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), org.LabelPolicyIconDarkAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyIconDarkAddedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), org.LabelPolicyIconDarkAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -311,17 +310,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceLogoRemoved light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyLogoRemovedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), org.LabelPolicyLogoRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyLogoRemovedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), org.LabelPolicyLogoRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -342,17 +341,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceLogoRemoved dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyLogoDarkRemovedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), org.LabelPolicyLogoDarkRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyLogoDarkRemovedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), org.LabelPolicyLogoDarkRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -373,17 +372,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceIconRemoved light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyIconRemovedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), org.LabelPolicyIconRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyIconRemovedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), org.LabelPolicyIconRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -404,17 +403,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceIconRemoved dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyIconDarkRemovedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), org.LabelPolicyIconDarkRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyIconDarkRemovedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), org.LabelPolicyIconDarkRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -435,17 +434,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceFontAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyFontAddedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/font.ttf"}`),
- ), org.LabelPolicyFontAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyFontAddedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/font.ttf"}`),
+ ), org.LabelPolicyFontAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceFontAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -466,17 +465,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceFontRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyFontRemovedEventType),
- org.AggregateType,
- []byte(`{"storeKey": "/path/to/font.ttf"}`),
- ), org.LabelPolicyFontRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyFontRemovedEventType,
+ org.AggregateType,
+ []byte(`{"storeKey": "/path/to/font.ttf"}`),
+ ), org.LabelPolicyFontRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceFontRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -497,17 +496,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceAssetsRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LabelPolicyAssetsRemovedEventType),
- org.AggregateType,
- nil,
- ), org.LabelPolicyAssetsRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LabelPolicyAssetsRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.LabelPolicyAssetsRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceAssetsRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -532,17 +531,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyAddedEventType),
- instance.AggregateType,
- []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b"}`),
- ), instance.LabelPolicyAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b"}`),
+ ), instance.LabelPolicyAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -576,17 +575,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyChangedEventType),
- instance.AggregateType,
- []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b", "primaryColorDark": "#ffffff","backgroundColorDark": "#ffffff", "warnColorDark": "#ffffff", "fontColorDark": "#ffffff", "hideLoginNameSuffix": true, "errorMsgPopup": true, "disableWatermark": true}`),
- ), instance.LabelPolicyChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{"backgroundColor": "#141735", "fontColor": "#ffffff", "primaryColor": "#5282c1", "warnColor": "#ff3b5b", "primaryColorDark": "#ffffff","backgroundColorDark": "#ffffff", "warnColorDark": "#ffffff", "fontColorDark": "#ffffff", "hideLoginNameSuffix": true, "errorMsgPopup": true, "disableWatermark": true}`),
+ ), instance.LabelPolicyChangedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -617,17 +616,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceActivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyActivatedEventType),
- instance.AggregateType,
- nil,
- ), instance.LabelPolicyActivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyActivatedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.LabelPolicyActivatedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceActivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -648,17 +647,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceLogoAdded light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyLogoAddedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), instance.LabelPolicyLogoAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyLogoAddedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), instance.LabelPolicyLogoAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -679,17 +678,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceLogoAdded dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyLogoDarkAddedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), instance.LabelPolicyLogoDarkAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyLogoDarkAddedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), instance.LabelPolicyLogoDarkAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -710,17 +709,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceIconAdded light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyIconAddedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), instance.LabelPolicyIconAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyIconAddedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), instance.LabelPolicyIconAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -741,17 +740,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceIconAdded dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyIconDarkAddedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), instance.LabelPolicyIconDarkAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyIconDarkAddedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), instance.LabelPolicyIconDarkAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -772,17 +771,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceLogoRemoved light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyLogoRemovedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), instance.LabelPolicyLogoRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyLogoRemovedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), instance.LabelPolicyLogoRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -803,17 +802,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceLogoRemoved dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyLogoDarkRemovedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/logo.png"}`),
- ), instance.LabelPolicyLogoDarkRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyLogoDarkRemovedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/logo.png"}`),
+ ), instance.LabelPolicyLogoDarkRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceLogoRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -834,17 +833,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceIconRemoved light",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyIconRemovedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), instance.LabelPolicyIconRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyIconRemovedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), instance.LabelPolicyIconRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -865,17 +864,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceIconRemoved dark",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyIconDarkRemovedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/icon.png"}`),
- ), instance.LabelPolicyIconDarkRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyIconDarkRemovedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/icon.png"}`),
+ ), instance.LabelPolicyIconDarkRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceIconRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -896,17 +895,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceFontAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyFontAddedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/font.ttf"}`),
- ), instance.LabelPolicyFontAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyFontAddedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/font.ttf"}`),
+ ), instance.LabelPolicyFontAddedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceFontAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -927,17 +926,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceFontRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyFontRemovedEventType),
- instance.AggregateType,
- []byte(`{"storeKey": "/path/to/font.ttf"}`),
- ), instance.LabelPolicyFontRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyFontRemovedEventType,
+ instance.AggregateType,
+ []byte(`{"storeKey": "/path/to/font.ttf"}`),
+ ), instance.LabelPolicyFontRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceFontRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -958,17 +957,17 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceAssetsRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LabelPolicyAssetsRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.LabelPolicyAssetsRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.LabelPolicyAssetsRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.LabelPolicyAssetsRemovedEventMapper),
},
reduce: (&labelPolicyProjection{}).reduceAssetsRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -994,16 +993,16 @@ func TestLabelPolicyProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&labelPolicyProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/lockout_policy.go b/internal/query/projection/lockout_policy.go
index 1a6f9f7a77..9ab9f6f519 100644
--- a/internal/query/projection/lockout_policy.go
+++ b/internal/query/projection/lockout_policy.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -29,41 +29,42 @@ const (
LockoutPolicyOwnerRemovedCol = "owner_removed"
)
-type lockoutPolicyProjection struct {
- crdb.StatementHandler
+type lockoutPolicyProjection struct{}
+
+func newLockoutPolicyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(lockoutPolicyProjection))
}
-func newLockoutPolicyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *lockoutPolicyProjection {
- p := new(lockoutPolicyProjection)
- config.ProjectionName = LockoutPolicyTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(LockoutPolicyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LockoutPolicyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(LockoutPolicyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(LockoutPolicySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(LockoutPolicyStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(LockoutPolicyIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LockoutPolicyResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(LockoutPolicyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LockoutPolicyMaxPasswordAttemptsCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(LockoutPolicyShowLockOutFailuresCol, crdb.ColumnTypeBool),
- crdb.NewColumn(LockoutPolicyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*lockoutPolicyProjection) Name() string {
+ return LockoutPolicyTable
+}
+
+func (*lockoutPolicyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(LockoutPolicyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LockoutPolicyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(LockoutPolicyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(LockoutPolicySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(LockoutPolicyStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(LockoutPolicyIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LockoutPolicyResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(LockoutPolicyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LockoutPolicyMaxPasswordAttemptsCol, handler.ColumnTypeInt64),
+ handler.NewColumn(LockoutPolicyShowLockOutFailuresCol, handler.ColumnTypeBool),
+ handler.NewColumn(LockoutPolicyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(LockoutPolicyInstanceIDCol, LockoutPolicyIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{LockoutPolicyOwnerRemovedCol})),
+ handler.NewPrimaryKey(LockoutPolicyInstanceIDCol, LockoutPolicyIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{LockoutPolicyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *lockoutPolicyProjection) reducers() []handler.AggregateReducer {
+func (p *lockoutPolicyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.LockoutPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -84,7 +85,7 @@ func (p *lockoutPolicyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.LockoutPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -115,7 +116,7 @@ func (p *lockoutPolicyProjection) reduceAdded(event eventstore.Event) (*handler.
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-d8mZO", "reduce.wrong.event.type, %v", []eventstore.EventType{org.LockoutPolicyAddedEventType, instance.LockoutPolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(LockoutPolicyCreationDateCol, policyEvent.CreationDate()),
@@ -151,7 +152,7 @@ func (p *lockoutPolicyProjection) reduceChanged(event eventstore.Event) (*handle
if policyEvent.ShowLockOutFailures != nil {
cols = append(cols, handler.NewCol(LockoutPolicyShowLockOutFailuresCol, *policyEvent.ShowLockOutFailures))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -165,7 +166,7 @@ func (p *lockoutPolicyProjection) reduceRemoved(event eventstore.Event) (*handle
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Bqut9", "reduce.wrong.event.type %s", org.LockoutPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(LockoutPolicyIDCol, policyEvent.Aggregate().ID),
@@ -179,7 +180,7 @@ func (p *lockoutPolicyProjection) reduceOwnerRemoved(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-IoW0x", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(LockoutPolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/lockout_policy_test.go b/internal/query/projection/lockout_policy_test.go
index 338f3a92a5..65e7125746 100644
--- a/internal/query/projection/lockout_policy_test.go
+++ b/internal/query/projection/lockout_policy_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,20 +24,20 @@ func TestLockoutPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LockoutPolicyAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LockoutPolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{
"maxPasswordAttempts": 10,
"showLockOutFailures": true
}`),
- ), org.LockoutPolicyAddedEventMapper),
+ ), org.LockoutPolicyAddedEventMapper),
},
reduce: (&lockoutPolicyProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -64,19 +63,19 @@ func TestLockoutPolicyProjection_reduces(t *testing.T) {
name: "org reduceChanged",
reduce: (&lockoutPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LockoutPolicyChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LockoutPolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{
"maxPasswordAttempts": 10,
"showLockOutFailures": true
}`),
- ), org.LockoutPolicyChangedEventMapper),
+ ), org.LockoutPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -98,16 +97,16 @@ func TestLockoutPolicyProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (&lockoutPolicyProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LockoutPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.LockoutPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LockoutPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.LockoutPolicyRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -124,17 +123,17 @@ func TestLockoutPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(LockoutPolicyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -151,19 +150,19 @@ func TestLockoutPolicyProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (&lockoutPolicyProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LockoutPolicyAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LockoutPolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"maxPasswordAttempts": 10,
"showLockOutFailures": true
}`),
- ), instance.LockoutPolicyAddedEventMapper),
+ ), instance.LockoutPolicyAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -189,19 +188,19 @@ func TestLockoutPolicyProjection_reduces(t *testing.T) {
name: "instance reduceChanged",
reduce: (&lockoutPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LockoutPolicyChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LockoutPolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"maxPasswordAttempts": 10,
"showLockOutFailures": true
}`),
- ), instance.LockoutPolicyChangedEventMapper),
+ ), instance.LockoutPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -223,16 +222,16 @@ func TestLockoutPolicyProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&lockoutPolicyProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/login_name.go b/internal/query/projection/login_name.go
index 2d21bdaff8..d8383af0ae 100644
--- a/internal/query/projection/login_name.go
+++ b/internal/query/projection/login_name.go
@@ -8,8 +8,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -171,61 +171,73 @@ func whenThenElse(when, then, el string) string {
return "(CASE WHEN " + when + " THEN " + then + " ELSE " + el + " END)"
}
-type loginNameProjection struct {
- crdb.StatementHandler
+type loginNameProjection struct{}
+
+func newLoginNameProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(loginNameProjection))
}
-func newLoginNameProjection(ctx context.Context, config crdb.StatementHandlerConfig) *loginNameProjection {
- p := new(loginNameProjection)
- config.ProjectionName = LoginNameProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewViewCheck(
+func (*loginNameProjection) Name() string {
+ return LoginNameProjectionTable
+}
+
+func (*loginNameProjection) Init() *old_handler.Check {
+ return handler.NewViewCheck(
viewStmt,
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(LoginNameUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNameUserUserNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNameUserResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNameUserInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNameUserOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- },
- crdb.NewPrimaryKey(LoginNameUserInstanceIDCol, LoginNameUserIDCol),
+ handler.NewSuffixedTable(
+ []*handler.InitColumn{
+ handler.NewColumn(LoginNameUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNameUserUserNameCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNameUserResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNameUserInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNameUserOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
+ },
+ handler.NewPrimaryKey(LoginNameUserInstanceIDCol, LoginNameUserIDCol),
loginNameUserSuffix,
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{LoginNameUserResourceOwnerCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{LoginNameUserOwnerRemovedCol})),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{LoginNameUserResourceOwnerCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{LoginNameUserOwnerRemovedCol})),
+ handler.WithIndex(
+ handler.NewIndex("lnu_instance_ro_id", []string{LoginNameUserInstanceIDCol, LoginNameUserResourceOwnerCol, LoginNameUserIDCol},
+ handler.WithInclude(
+ LoginNameUserUserNameCol,
+ LoginNameUserOwnerRemovedCol,
+ ),
+ ),
+ ),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(LoginNameDomainNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNameDomainIsPrimaryCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LoginNameDomainResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNameDomainInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNameDomainOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- },
- crdb.NewPrimaryKey(LoginNameDomainInstanceIDCol, LoginNameDomainResourceOwnerCol, LoginNameDomainNameCol),
+ handler.NewSuffixedTable(
+ []*handler.InitColumn{
+ handler.NewColumn(LoginNameDomainNameCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNameDomainIsPrimaryCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LoginNameDomainResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNameDomainInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNameDomainOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
+ },
+ handler.NewPrimaryKey(LoginNameDomainInstanceIDCol, LoginNameDomainResourceOwnerCol, LoginNameDomainNameCol),
loginNameDomainSuffix,
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{LoginNameDomainOwnerRemovedCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{LoginNameDomainOwnerRemovedCol})),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(LoginNamePoliciesMustBeDomainCol, crdb.ColumnTypeBool),
- crdb.NewColumn(LoginNamePoliciesIsDefaultCol, crdb.ColumnTypeBool),
- crdb.NewColumn(LoginNamePoliciesResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNamePoliciesInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginNamePoliciesOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- },
- crdb.NewPrimaryKey(LoginNamePoliciesInstanceIDCol, LoginNamePoliciesResourceOwnerCol),
+ handler.NewSuffixedTable(
+ []*handler.InitColumn{
+ handler.NewColumn(LoginNamePoliciesMustBeDomainCol, handler.ColumnTypeBool),
+ handler.NewColumn(LoginNamePoliciesIsDefaultCol, handler.ColumnTypeBool),
+ handler.NewColumn(LoginNamePoliciesResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNamePoliciesInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginNamePoliciesOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
+ },
+ handler.NewPrimaryKey(LoginNamePoliciesInstanceIDCol, LoginNamePoliciesResourceOwnerCol),
loginNamePolicySuffix,
- crdb.WithIndex(crdb.NewIndex("is_default", []string{LoginNamePoliciesResourceOwnerCol, LoginNamePoliciesIsDefaultCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{LoginNamePoliciesOwnerRemovedCol})),
+ handler.WithIndex(handler.NewIndex("is_default", []string{LoginNamePoliciesResourceOwnerCol, LoginNamePoliciesIsDefaultCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{LoginNamePoliciesOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *loginNameProjection) reducers() []handler.AggregateReducer {
+func (p *loginNameProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserV1AddedType,
Reduce: p.reduceUserCreated,
@@ -265,7 +277,7 @@ func (p *loginNameProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.DomainPolicyAddedEventType,
Reduce: p.reduceOrgIAMPolicyAdded,
@@ -298,7 +310,7 @@ func (p *loginNameProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.DomainPolicyAddedEventType,
Reduce: p.reduceOrgIAMPolicyAdded,
@@ -330,7 +342,7 @@ func (p *loginNameProjection) reduceUserCreated(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ayo69", "reduce.wrong.event.type %v", []eventstore.EventType{user.UserV1AddedType, user.HumanAddedType, user.UserV1RegisteredType, user.HumanRegisteredType, user.MachineAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
event,
[]handler.Column{
handler.NewCol(LoginNameUserIDCol, event.Aggregate().ID),
@@ -338,7 +350,7 @@ func (p *loginNameProjection) reduceUserCreated(event eventstore.Event) (*handle
handler.NewCol(LoginNameUserResourceOwnerCol, event.Aggregate().ResourceOwner),
handler.NewCol(LoginNameUserInstanceIDCol, event.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameUserSuffix),
+ handler.WithTableSuffix(loginNameUserSuffix),
), nil
}
@@ -348,13 +360,13 @@ func (p *loginNameProjection) reduceUserRemoved(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-QIe3C", "reduce.wrong.event.type %s", user.UserRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(LoginNameUserIDCol, e.Aggregate().ID),
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameUserSuffix),
+ handler.WithTableSuffix(loginNameUserSuffix),
), nil
}
@@ -364,7 +376,7 @@ func (p *loginNameProjection) reduceUserNameChanged(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-QlwjC", "reduce.wrong.event.type %s", user.UserUserNameChangedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
handler.NewCol(LoginNameUserUserNameCol, e.UserName),
@@ -373,7 +385,7 @@ func (p *loginNameProjection) reduceUserNameChanged(event eventstore.Event) (*ha
handler.NewCond(LoginNameUserIDCol, e.Aggregate().ID),
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameUserSuffix),
+ handler.WithTableSuffix(loginNameUserSuffix),
), nil
}
@@ -383,7 +395,7 @@ func (p *loginNameProjection) reduceUserDomainClaimed(event eventstore.Event) (*
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-AQMBY", "reduce.wrong.event.type %s", user.UserDomainClaimedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
handler.NewCol(LoginNameUserUserNameCol, e.UserName),
@@ -392,7 +404,7 @@ func (p *loginNameProjection) reduceUserDomainClaimed(event eventstore.Event) (*
handler.NewCond(LoginNameUserIDCol, e.Aggregate().ID),
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameUserSuffix),
+ handler.WithTableSuffix(loginNameUserSuffix),
), nil
}
@@ -413,7 +425,7 @@ func (p *loginNameProjection) reduceOrgIAMPolicyAdded(event eventstore.Event) (*
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-yCV6S", "reduce.wrong.event.type %v", []eventstore.EventType{org.DomainPolicyAddedEventType, instance.DomainPolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
event,
[]handler.Column{
handler.NewCol(LoginNamePoliciesMustBeDomainCol, policyEvent.UserLoginMustBeDomain),
@@ -421,7 +433,7 @@ func (p *loginNameProjection) reduceOrgIAMPolicyAdded(event eventstore.Event) (*
handler.NewCol(LoginNamePoliciesResourceOwnerCol, policyEvent.Aggregate().ResourceOwner),
handler.NewCol(LoginNamePoliciesInstanceIDCol, policyEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNamePolicySuffix),
+ handler.WithTableSuffix(loginNamePolicySuffix),
), nil
}
@@ -438,10 +450,10 @@ func (p *loginNameProjection) reduceDomainPolicyChanged(event eventstore.Event)
}
if policyEvent.UserLoginMustBeDomain == nil {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
handler.NewCol(LoginNamePoliciesMustBeDomainCol, *policyEvent.UserLoginMustBeDomain),
@@ -450,7 +462,7 @@ func (p *loginNameProjection) reduceDomainPolicyChanged(event eventstore.Event)
handler.NewCond(LoginNamePoliciesResourceOwnerCol, policyEvent.Aggregate().ResourceOwner),
handler.NewCond(LoginNamePoliciesInstanceIDCol, policyEvent.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNamePolicySuffix),
+ handler.WithTableSuffix(loginNamePolicySuffix),
), nil
}
@@ -460,13 +472,13 @@ func (p *loginNameProjection) reduceDomainPolicyRemoved(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ysEeB", "reduce.wrong.event.type %s", org.DomainPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(LoginNamePoliciesResourceOwnerCol, e.Aggregate().ResourceOwner),
handler.NewCond(LoginNamePoliciesInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNamePolicySuffix),
+ handler.WithTableSuffix(loginNamePolicySuffix),
), nil
}
@@ -476,14 +488,14 @@ func (p *loginNameProjection) reduceDomainVerified(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-weGAh", "reduce.wrong.event.type %s", org.OrgDomainVerifiedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
event,
[]handler.Column{
handler.NewCol(LoginNameDomainNameCol, e.Domain),
handler.NewCol(LoginNameDomainResourceOwnerCol, e.Aggregate().ResourceOwner),
handler.NewCol(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameDomainSuffix),
+ handler.WithTableSuffix(loginNameDomainSuffix),
), nil
}
@@ -493,9 +505,9 @@ func (p *loginNameProjection) reducePrimaryDomainSet(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-eOXPN", "reduce.wrong.event.type %s", org.OrgDomainPrimarySetEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(LoginNameDomainIsPrimaryCol, false),
},
@@ -504,9 +516,9 @@ func (p *loginNameProjection) reducePrimaryDomainSet(event eventstore.Event) (*h
handler.NewCond(LoginNameDomainIsPrimaryCol, true),
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameDomainSuffix),
+ handler.WithTableSuffix(loginNameDomainSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(LoginNameDomainIsPrimaryCol, true),
},
@@ -515,7 +527,7 @@ func (p *loginNameProjection) reducePrimaryDomainSet(event eventstore.Event) (*h
handler.NewCond(LoginNameDomainResourceOwnerCol, e.Aggregate().ResourceOwner),
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameDomainSuffix),
+ handler.WithTableSuffix(loginNameDomainSuffix),
),
), nil
}
@@ -526,14 +538,14 @@ func (p *loginNameProjection) reduceDomainRemoved(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-4RHYq", "reduce.wrong.event.type %s", org.OrgDomainRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(LoginNameDomainNameCol, e.Domain),
handler.NewCond(LoginNameDomainResourceOwnerCol, e.Aggregate().ResourceOwner),
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(loginNameDomainSuffix),
+ handler.WithTableSuffix(loginNameDomainSuffix),
), nil
}
@@ -543,25 +555,25 @@ func (p *loginNameProjection) reduceInstanceRemoved(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ASeg3", "reduce.wrong.event.type %s", instance.InstanceRemovedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
event,
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().ID),
},
- crdb.WithTableSuffix(loginNameDomainSuffix),
+ handler.WithTableSuffix(loginNameDomainSuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(LoginNamePoliciesInstanceIDCol, e.Aggregate().ID),
},
- crdb.WithTableSuffix(loginNamePolicySuffix),
+ handler.WithTableSuffix(loginNamePolicySuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().ID),
},
- crdb.WithTableSuffix(loginNameUserSuffix),
+ handler.WithTableSuffix(loginNameUserSuffix),
),
), nil
}
@@ -572,28 +584,28 @@ func (p *loginNameProjection) reduceOwnerRemoved(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-px02mo", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
event,
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(LoginNameDomainInstanceIDCol, e.Aggregate().InstanceID),
handler.NewCond(LoginNameDomainResourceOwnerCol, e.Aggregate().ID),
},
- crdb.WithTableSuffix(loginNameDomainSuffix),
+ handler.WithTableSuffix(loginNameDomainSuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(LoginNamePoliciesInstanceIDCol, e.Aggregate().InstanceID),
handler.NewCond(LoginNamePoliciesResourceOwnerCol, e.Aggregate().ID),
},
- crdb.WithTableSuffix(loginNamePolicySuffix),
+ handler.WithTableSuffix(loginNamePolicySuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(LoginNameUserInstanceIDCol, e.Aggregate().InstanceID),
handler.NewCond(LoginNameUserResourceOwnerCol, e.Aggregate().ID),
},
- crdb.WithTableSuffix(loginNameUserSuffix),
+ handler.WithTableSuffix(loginNameUserSuffix),
),
), nil
}
diff --git a/internal/query/projection/login_name_test.go b/internal/query/projection/login_name_test.go
index 92f1b583de..36c38ec76e 100644
--- a/internal/query/projection/login_name_test.go
+++ b/internal/query/projection/login_name_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -25,19 +24,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "user HumanAddedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanAddedType,
+ user.AggregateType,
+ []byte(`{
"userName": "human-added"
}`),
- ), user.HumanAddedEventMapper),
+ ), user.HumanAddedEventMapper),
},
reduce: (&loginNameProjection{}).reduceUserCreated,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -56,19 +55,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "user HumanRegisteredType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanRegisteredType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanRegisteredType,
+ user.AggregateType,
+ []byte(`{
"userName": "human-registered"
}`),
- ), user.HumanRegisteredEventMapper),
+ ), user.HumanRegisteredEventMapper),
},
reduce: (&loginNameProjection{}).reduceUserCreated,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -87,19 +86,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "user MachineAddedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineAddedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MachineAddedEventType,
+ user.AggregateType,
+ []byte(`{
"userName": "machine-added"
}`),
- ), user.MachineAddedEventMapper),
+ ), user.MachineAddedEventMapper),
},
reduce: (&loginNameProjection{}).reduceUserCreated,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -118,17 +117,17 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "user UserRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&loginNameProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -145,19 +144,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "user UserUserNameChangedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserUserNameChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserUserNameChangedType,
+ user.AggregateType,
+ []byte(`{
"userName": "changed"
}`),
- ), user.UsernameChangedEventMapper),
+ ), user.UsernameChangedEventMapper),
},
reduce: (&loginNameProjection{}).reduceUserNameChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -175,19 +174,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "user UserDomainClaimedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserDomainClaimedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserDomainClaimedType,
+ user.AggregateType,
+ []byte(`{
"userName": "claimed"
}`),
- ), user.DomainClaimedEventMapper),
+ ), user.DomainClaimedEventMapper),
},
reduce: (&loginNameProjection{}).reduceUserDomainClaimed,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -205,19 +204,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "org OrgDomainPolicyAddedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.DomainPolicyAddedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.DomainPolicyAddedEventType,
+ user.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": true
}`),
- ), org.DomainPolicyAddedEventMapper),
+ ), org.DomainPolicyAddedEventMapper),
},
reduce: (&loginNameProjection{}).reduceOrgIAMPolicyAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -236,19 +235,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "org OrgDomainPolicyChangedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.DomainPolicyChangedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.DomainPolicyChangedEventType,
+ user.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": false
}`),
- ), org.DomainPolicyChangedEventMapper),
+ ), org.DomainPolicyChangedEventMapper),
},
reduce: (&loginNameProjection{}).reduceDomainPolicyChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -266,17 +265,17 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "org OrgDomainPolicyChangedEventType no change",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.DomainPolicyChangedEventType),
- user.AggregateType,
- []byte(`{}`),
- ), org.DomainPolicyChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.DomainPolicyChangedEventType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), org.DomainPolicyChangedEventMapper),
},
reduce: (&loginNameProjection{}).reduceDomainPolicyChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -285,17 +284,17 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "org OrgDomainPolicyRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.DomainPolicyRemovedEventType),
- user.AggregateType,
- []byte(`{}`),
- ), org.DomainPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.DomainPolicyRemovedEventType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), org.DomainPolicyRemovedEventMapper),
},
reduce: (&loginNameProjection{}).reduceDomainPolicyRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -312,19 +311,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "org OrgDomainVerifiedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainVerifiedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.OrgDomainVerifiedEventType,
+ user.AggregateType,
+ []byte(`{
"domain": "verified"
}`),
- ), org.DomainVerifiedEventMapper),
+ ), org.DomainVerifiedEventMapper),
},
reduce: (&loginNameProjection{}).reduceDomainVerified,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -342,19 +341,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "org OrgDomainRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainRemovedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.OrgDomainRemovedEventType,
+ user.AggregateType,
+ []byte(`{
"domain": "remove"
}`),
- ), org.DomainRemovedEventMapper),
+ ), org.DomainRemovedEventMapper),
},
reduce: (&loginNameProjection{}).reduceDomainRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -372,19 +371,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "org OrgDomainPrimarySetEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainPrimarySetEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.OrgDomainPrimarySetEventType,
+ user.AggregateType,
+ []byte(`{
"domain": "primary"
}`),
- ), org.DomainPrimarySetEventMapper),
+ ), org.DomainPrimarySetEventMapper),
},
reduce: (&loginNameProjection{}).reducePrimaryDomainSet,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -412,19 +411,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "iam OrgDomainPolicyAddedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DomainPolicyAddedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DomainPolicyAddedEventType,
+ user.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": true
}`),
- ), instance.DomainPolicyAddedEventMapper),
+ ), instance.DomainPolicyAddedEventMapper),
},
reduce: (&loginNameProjection{}).reduceOrgIAMPolicyAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -443,19 +442,19 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "iam OrgDomainPolicyChangedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DomainPolicyChangedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.DomainPolicyChangedEventType,
+ user.AggregateType,
+ []byte(`{
"userLoginMustBeDomain": false
}`),
- ), instance.DomainPolicyChangedEventMapper),
+ ), instance.DomainPolicyChangedEventMapper),
},
reduce: (&loginNameProjection{}).reduceDomainPolicyChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -473,17 +472,17 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "iam OrgDomainPolicyChangedEventType no change",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.DomainPolicyChangedEventType),
- user.AggregateType,
- []byte(`{}`),
- ), instance.DomainPolicyChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.DomainPolicyChangedEventType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), instance.DomainPolicyChangedEventMapper),
},
reduce: (&loginNameProjection{}).reduceDomainPolicyChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -492,17 +491,17 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: (&loginNameProjection{}).reduceInstanceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -530,17 +529,17 @@ func TestLoginNameProjection_reduces(t *testing.T) {
{
name: "instance.reduceOwnerRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- []byte(`{"name": "Name"}`),
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ []byte(`{"name": "Name"}`),
+ ), org.OrgRemovedEventMapper),
},
reduce: (&loginNameProjection{}).reduceOwnerRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/login_policy.go b/internal/query/projection/login_policy.go
index f05dce5260..3101accbeb 100644
--- a/internal/query/projection/login_policy.go
+++ b/internal/query/projection/login_policy.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -43,56 +43,57 @@ const (
LoginPolicyOwnerRemovedCol = "owner_removed"
)
-type loginPolicyProjection struct {
- crdb.StatementHandler
+type loginPolicyProjection struct{}
+
+func newLoginPolicyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(loginPolicyProjection))
}
-func newLoginPolicyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *loginPolicyProjection {
- p := new(loginPolicyProjection)
- config.ProjectionName = LoginPolicyTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(LoginPolicyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginPolicyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(LoginPolicyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(LoginPolicyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(LoginPolicySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(LoginPolicyIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LoginPolicyAllowRegisterCol, crdb.ColumnTypeBool),
- crdb.NewColumn(LoginPolicyAllowUsernamePasswordCol, crdb.ColumnTypeBool),
- crdb.NewColumn(LoginPolicyAllowExternalIDPsCol, crdb.ColumnTypeBool),
- crdb.NewColumn(LoginPolicyForceMFACol, crdb.ColumnTypeBool),
- crdb.NewColumn(LoginPolicyForceMFALocalOnlyCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(LoginPolicy2FAsCol, crdb.ColumnTypeEnumArray, crdb.Nullable()),
- crdb.NewColumn(LoginPolicyMFAsCol, crdb.ColumnTypeEnumArray, crdb.Nullable()),
- crdb.NewColumn(LoginPolicyPasswordlessTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(LoginPolicyHidePWResetCol, crdb.ColumnTypeBool),
- crdb.NewColumn(IgnoreUnknownUsernames, crdb.ColumnTypeBool),
- crdb.NewColumn(AllowDomainDiscovery, crdb.ColumnTypeBool),
- crdb.NewColumn(DisableLoginWithEmail, crdb.ColumnTypeBool),
- crdb.NewColumn(DisableLoginWithPhone, crdb.ColumnTypeBool),
- crdb.NewColumn(DefaultRedirectURI, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(PasswordCheckLifetimeCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(ExternalLoginCheckLifetimeCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(MFAInitSkipLifetimeCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(SecondFactorCheckLifetimeCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(MultiFactorCheckLifetimeCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(LoginPolicyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*loginPolicyProjection) Name() string {
+ return LoginPolicyTable
+}
+
+func (*loginPolicyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(LoginPolicyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginPolicyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(LoginPolicyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(LoginPolicyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(LoginPolicySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(LoginPolicyIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LoginPolicyAllowRegisterCol, handler.ColumnTypeBool),
+ handler.NewColumn(LoginPolicyAllowUsernamePasswordCol, handler.ColumnTypeBool),
+ handler.NewColumn(LoginPolicyAllowExternalIDPsCol, handler.ColumnTypeBool),
+ handler.NewColumn(LoginPolicyForceMFACol, handler.ColumnTypeBool),
+ handler.NewColumn(LoginPolicyForceMFALocalOnlyCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(LoginPolicy2FAsCol, handler.ColumnTypeEnumArray, handler.Nullable()),
+ handler.NewColumn(LoginPolicyMFAsCol, handler.ColumnTypeEnumArray, handler.Nullable()),
+ handler.NewColumn(LoginPolicyPasswordlessTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(LoginPolicyHidePWResetCol, handler.ColumnTypeBool),
+ handler.NewColumn(IgnoreUnknownUsernames, handler.ColumnTypeBool),
+ handler.NewColumn(AllowDomainDiscovery, handler.ColumnTypeBool),
+ handler.NewColumn(DisableLoginWithEmail, handler.ColumnTypeBool),
+ handler.NewColumn(DisableLoginWithPhone, handler.ColumnTypeBool),
+ handler.NewColumn(DefaultRedirectURI, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(PasswordCheckLifetimeCol, handler.ColumnTypeInt64),
+ handler.NewColumn(ExternalLoginCheckLifetimeCol, handler.ColumnTypeInt64),
+ handler.NewColumn(MFAInitSkipLifetimeCol, handler.ColumnTypeInt64),
+ handler.NewColumn(SecondFactorCheckLifetimeCol, handler.ColumnTypeInt64),
+ handler.NewColumn(MultiFactorCheckLifetimeCol, handler.ColumnTypeInt64),
+ handler.NewColumn(LoginPolicyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(LoginPolicyInstanceIDCol, LoginPolicyIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{LoginPolicyOwnerRemovedCol})),
+ handler.NewPrimaryKey(LoginPolicyInstanceIDCol, LoginPolicyIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{LoginPolicyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *loginPolicyProjection) reducers() []handler.AggregateReducer {
+func (p *loginPolicyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.LoginPolicyAddedEventType,
Reduce: p.reduceLoginPolicyAdded,
@@ -129,7 +130,7 @@ func (p *loginPolicyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.LoginPolicyAddedEventType,
Reduce: p.reduceLoginPolicyAdded,
@@ -177,7 +178,7 @@ func (p *loginPolicyProjection) reduceLoginPolicyAdded(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-pYPxS", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicyAddedEventType, instance.LoginPolicyAddedEventType})
}
- return crdb.NewCreateStatement(&policyEvent, []handler.Column{
+ return handler.NewCreateStatement(&policyEvent, []handler.Column{
handler.NewCol(LoginPolicyIDCol, policyEvent.Aggregate().ID),
handler.NewCol(LoginPolicyInstanceIDCol, policyEvent.Aggregate().InstanceID),
handler.NewCol(LoginPolicyCreationDateCol, policyEvent.CreationDate()),
@@ -271,7 +272,7 @@ func (p *loginPolicyProjection) reduceLoginPolicyChanged(event eventstore.Event)
cols = append(cols, handler.NewCol(MultiFactorCheckLifetimeCol, *policyEvent.MultiFactorCheckLifetime))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -292,12 +293,12 @@ func (p *loginPolicyProjection) reduceMFAAdded(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-WMhAV", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicyMultiFactorAddedEventType, instance.LoginPolicyMultiFactorAddedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(LoginPolicyChangeDateCol, policyEvent.CreationDate()),
handler.NewCol(LoginPolicySequenceCol, policyEvent.Sequence()),
- crdb.NewArrayAppendCol(LoginPolicyMFAsCol, policyEvent.MFAType),
+ handler.NewArrayAppendCol(LoginPolicyMFAsCol, policyEvent.MFAType),
},
[]handler.Condition{
handler.NewCond(LoginPolicyIDCol, policyEvent.Aggregate().ID),
@@ -317,12 +318,12 @@ func (p *loginPolicyProjection) reduceMFARemoved(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-czU7n", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicyMultiFactorRemovedEventType, instance.LoginPolicyMultiFactorRemovedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(LoginPolicyChangeDateCol, policyEvent.CreationDate()),
handler.NewCol(LoginPolicySequenceCol, policyEvent.Sequence()),
- crdb.NewArrayRemoveCol(LoginPolicyMFAsCol, policyEvent.MFAType),
+ handler.NewArrayRemoveCol(LoginPolicyMFAsCol, policyEvent.MFAType),
},
[]handler.Condition{
handler.NewCond(LoginPolicyIDCol, policyEvent.Aggregate().ID),
@@ -336,7 +337,7 @@ func (p *loginPolicyProjection) reduceLoginPolicyRemoved(event eventstore.Event)
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-oRSvD", "reduce.wrong.event.type %s", org.LoginPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(LoginPolicyIDCol, e.Aggregate().ID),
@@ -356,12 +357,12 @@ func (p *loginPolicyProjection) reduceSecondFactorAdded(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-agB2E", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicySecondFactorAddedEventType, instance.LoginPolicySecondFactorAddedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(LoginPolicyChangeDateCol, policyEvent.CreationDate()),
handler.NewCol(LoginPolicySequenceCol, policyEvent.Sequence()),
- crdb.NewArrayAppendCol(LoginPolicy2FAsCol, policyEvent.MFAType),
+ handler.NewArrayAppendCol(LoginPolicy2FAsCol, policyEvent.MFAType),
},
[]handler.Condition{
handler.NewCond(LoginPolicyIDCol, policyEvent.Aggregate().ID),
@@ -381,12 +382,12 @@ func (p *loginPolicyProjection) reduceSecondFactorRemoved(event eventstore.Event
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-KYJvA", "reduce.wrong.event.type %v", []eventstore.EventType{org.LoginPolicySecondFactorRemovedEventType, instance.LoginPolicySecondFactorRemovedEventType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(LoginPolicyChangeDateCol, policyEvent.CreationDate()),
handler.NewCol(LoginPolicySequenceCol, policyEvent.Sequence()),
- crdb.NewArrayRemoveCol(LoginPolicy2FAsCol, policyEvent.MFAType),
+ handler.NewArrayRemoveCol(LoginPolicy2FAsCol, policyEvent.MFAType),
},
[]handler.Condition{
handler.NewCond(LoginPolicyIDCol, policyEvent.Aggregate().ID),
@@ -401,7 +402,7 @@ func (p *loginPolicyProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-B8NZW", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(LoginPolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/login_policy_test.go b/internal/query/projection/login_policy_test.go
index 62df313b71..4ebfa3483d 100644
--- a/internal/query/projection/login_policy_test.go
+++ b/internal/query/projection/login_policy_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -26,10 +25,11 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceLoginPolicyAdded without forceMFALocalOnly",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{
"allowUsernamePassword": true,
"allowRegister": true,
"allowExternalIdp": false,
@@ -47,13 +47,12 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
"secondFactorCheckLifetime": 10000000,
"multiFactorCheckLifetime": 10000000
}`),
- ), org.LoginPolicyAddedEventMapper),
+ ), org.LoginPolicyAddedEventMapper),
},
reduce: (&loginPolicyProjection{}).reduceLoginPolicyAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -92,7 +91,7 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org reduceLoginPolicyAdded",
args: args{
event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyAddedEventType),
+ org.LoginPolicyAddedEventType,
org.AggregateType,
[]byte(`{
"allowUsernamePassword": true,
@@ -117,9 +116,8 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
},
reduce: (&loginPolicyProjection{}).reduceLoginPolicyAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -158,10 +156,11 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org reduceLoginPolicyChanged",
reduce: (&loginPolicyProjection{}).reduceLoginPolicyChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{
"allowUsernamePassword": true,
"allowRegister": true,
"allowExternalIdp": true,
@@ -180,12 +179,11 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
"secondFactorCheckLifetime": 10000000,
"multiFactorCheckLifetime": 10000000
}`),
- ), org.LoginPolicyChangedEventMapper),
+ ), org.LoginPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -222,18 +220,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org reduceMFAAdded",
reduce: (&loginPolicyProjection{}).reduceMFAAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyMultiFactorAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyMultiFactorAddedEventType,
+ org.AggregateType,
+ []byte(`{
"mfaType": 1
}`),
- ), org.MultiFactorAddedEventEventMapper),
+ ), org.MultiFactorAddedEventEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -254,18 +252,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org reduceMFARemoved",
reduce: (&loginPolicyProjection{}).reduceMFARemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyMultiFactorRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyMultiFactorRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"mfaType": 1
}`),
- ), org.MultiFactorRemovedEventEventMapper),
+ ), org.MultiFactorRemovedEventEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -286,16 +284,16 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org reduceLoginPolicyRemoved",
reduce: (&loginPolicyProjection{}).reduceLoginPolicyRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.LoginPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.LoginPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.LoginPolicyRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -313,18 +311,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org reduceSecondFactorAdded",
reduce: (&loginPolicyProjection{}).reduceSecondFactorAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicySecondFactorAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicySecondFactorAddedEventType,
+ org.AggregateType,
+ []byte(`{
"mfaType": 2
}`),
- ), org.SecondFactorAddedEventEventMapper),
+ ), org.SecondFactorAddedEventEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -345,18 +343,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org reduceSecondFactorRemoved",
reduce: (&loginPolicyProjection{}).reduceSecondFactorRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.LoginPolicySecondFactorRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.LoginPolicySecondFactorRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"mfaType": 2
}`),
- ), org.SecondFactorRemovedEventEventMapper),
+ ), org.SecondFactorRemovedEventEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -377,10 +375,11 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "instance reduceLoginPolicyAdded",
reduce: (&loginPolicyProjection{}).reduceLoginPolicyAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicyAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"allowUsernamePassword": true,
"allowRegister": true,
"allowExternalIdp": true,
@@ -399,12 +398,11 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
"secondFactorCheckLifetime": 10000000,
"multiFactorCheckLifetime": 10000000
}`),
- ), instance.LoginPolicyAddedEventMapper),
+ ), instance.LoginPolicyAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -443,10 +441,11 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "instance reduceLoginPolicyChanged",
reduce: (&loginPolicyProjection{}).reduceLoginPolicyChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicyChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"allowUsernamePassword": true,
"allowRegister": true,
"allowExternalIdp": true,
@@ -460,12 +459,11 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
"passwordlessType": 1,
"defaultRedirectURI": "https://example.com/redirect"
}`),
- ), instance.LoginPolicyChangedEventMapper),
+ ), instance.LoginPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -497,18 +495,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "instance reduceMFAAdded",
reduce: (&loginPolicyProjection{}).reduceMFAAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicyMultiFactorAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicyMultiFactorAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"mfaType": 1
}`),
- ), instance.MultiFactorAddedEventMapper),
+ ), instance.MultiFactorAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -529,18 +527,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "instance reduceMFARemoved",
reduce: (&loginPolicyProjection{}).reduceMFARemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicyMultiFactorRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicyMultiFactorRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"mfaType": 1
}`),
- ), instance.MultiFactorRemovedEventMapper),
+ ), instance.MultiFactorRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -561,18 +559,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "instance reduceSecondFactorAdded u2f",
reduce: (&loginPolicyProjection{}).reduceSecondFactorAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicySecondFactorAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicySecondFactorAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"mfaType": 2
}`),
- ), instance.SecondFactorAddedEventMapper),
+ ), instance.SecondFactorAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -593,18 +591,18 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "instance reduceSecondFactorRemoved u2f",
reduce: (&loginPolicyProjection{}).reduceSecondFactorRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicySecondFactorRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.LoginPolicySecondFactorRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"mfaType": 2
}`),
- ), instance.SecondFactorRemovedEventMapper),
+ ), instance.SecondFactorRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -626,7 +624,7 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
reduce: (&loginPolicyProjection{}).reduceSecondFactorAdded,
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicySecondFactorAddedEventType),
+ instance.LoginPolicySecondFactorAddedEventType,
instance.AggregateType,
[]byte(`{
"mfaType": 3
@@ -634,9 +632,8 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
), instance.SecondFactorAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -658,7 +655,7 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
reduce: (&loginPolicyProjection{}).reduceSecondFactorRemoved,
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.LoginPolicySecondFactorRemovedEventType),
+ instance.LoginPolicySecondFactorRemovedEventType,
instance.AggregateType,
[]byte(`{
"mfaType": 3
@@ -666,9 +663,8 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
), instance.SecondFactorRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -689,16 +685,16 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&loginPolicyProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -715,17 +711,17 @@ func TestLoginPolicyProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(LoginPolicyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/mail_template.go b/internal/query/projection/mail_template.go
index d88f000543..91bab4c655 100644
--- a/internal/query/projection/mail_template.go
+++ b/internal/query/projection/mail_template.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -27,39 +27,40 @@ const (
MailTemplateOwnerRemovedCol = "owner_removed"
)
-type mailTemplateProjection struct {
- crdb.StatementHandler
+type mailTemplateProjection struct{}
+
+func newMailTemplateProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(mailTemplateProjection))
}
-func newMailTemplateProjection(ctx context.Context, config crdb.StatementHandlerConfig) *mailTemplateProjection {
- p := new(mailTemplateProjection)
- config.ProjectionName = MailTemplateTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(MailTemplateAggregateIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(MailTemplateInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(MailTemplateCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(MailTemplateChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(MailTemplateSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(MailTemplateStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(MailTemplateIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(MailTemplateTemplateCol, crdb.ColumnTypeBytes),
- crdb.NewColumn(MailTemplateOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*mailTemplateProjection) Name() string {
+ return MailTemplateTable
+}
+
+func (*mailTemplateProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(MailTemplateAggregateIDCol, handler.ColumnTypeText),
+ handler.NewColumn(MailTemplateInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(MailTemplateCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(MailTemplateChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(MailTemplateSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(MailTemplateStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(MailTemplateIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(MailTemplateTemplateCol, handler.ColumnTypeBytes),
+ handler.NewColumn(MailTemplateOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(MailTemplateInstanceIDCol, MailTemplateAggregateIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{MailTemplateOwnerRemovedCol})),
+ handler.NewPrimaryKey(MailTemplateInstanceIDCol, MailTemplateAggregateIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{MailTemplateOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *mailTemplateProjection) reducers() []handler.AggregateReducer {
+func (p *mailTemplateProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.MailTemplateAddedEventType,
Reduce: p.reduceAdded,
@@ -80,7 +81,7 @@ func (p *mailTemplateProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.MailTemplateAddedEventType,
Reduce: p.reduceAdded,
@@ -111,7 +112,7 @@ func (p *mailTemplateProjection) reduceAdded(event eventstore.Event) (*handler.S
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-0pJ3f", "reduce.wrong.event.type, %v", []eventstore.EventType{org.MailTemplateAddedEventType, instance.MailTemplateAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&templateEvent,
[]handler.Column{
handler.NewCol(MailTemplateAggregateIDCol, templateEvent.Aggregate().ID),
@@ -142,7 +143,7 @@ func (p *mailTemplateProjection) reduceChanged(event eventstore.Event) (*handler
if policyEvent.Template != nil {
cols = append(cols, handler.NewCol(MailTemplateTemplateCol, *policyEvent.Template))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -156,7 +157,7 @@ func (p *mailTemplateProjection) reduceRemoved(event eventstore.Event) (*handler
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-3jJGs", "reduce.wrong.event.type %s", org.MailTemplateRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(MailTemplateAggregateIDCol, policyEvent.Aggregate().ID),
@@ -170,7 +171,7 @@ func (p *mailTemplateProjection) reduceOwnerRemoved(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-CThXR", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(MailTemplateInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/mail_template_test.go b/internal/query/projection/mail_template_test.go
index f4a7d46b0d..336ad394f6 100644
--- a/internal/query/projection/mail_template_test.go
+++ b/internal/query/projection/mail_template_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,19 +24,19 @@ func TestMailTemplateProjection_reduces(t *testing.T) {
{
name: "org.reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MailTemplateAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MailTemplateAddedEventType,
+ org.AggregateType,
+ []byte(`{
"template": "PHRhYmxlPjwvdGFibGU+"
}`),
- ), org.MailTemplateAddedEventMapper),
+ ), org.MailTemplateAddedEventMapper),
},
reduce: (&mailTemplateProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -61,18 +60,18 @@ func TestMailTemplateProjection_reduces(t *testing.T) {
name: "org.reduceChanged",
reduce: (&mailTemplateProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MailTemplateChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MailTemplateChangedEventType,
+ org.AggregateType,
+ []byte(`{
"template": "PHRhYmxlPjwvdGFibGU+"
}`),
- ), org.MailTemplateChangedEventMapper),
+ ), org.MailTemplateChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -93,16 +92,16 @@ func TestMailTemplateProjection_reduces(t *testing.T) {
name: "org.reduceRemoved",
reduce: (&mailTemplateProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MailTemplateRemovedEventType),
- org.AggregateType,
- nil,
- ), org.MailTemplateRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.MailTemplateRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.MailTemplateRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -119,17 +118,17 @@ func TestMailTemplateProjection_reduces(t *testing.T) {
{
name: "instance.reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MailTemplateInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -146,18 +145,18 @@ func TestMailTemplateProjection_reduces(t *testing.T) {
name: "instance.reduceAdded",
reduce: (&mailTemplateProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.MailTemplateAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.MailTemplateAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"template": "PHRhYmxlPjwvdGFibGU+"
}`),
- ), instance.MailTemplateAddedEventMapper),
+ ), instance.MailTemplateAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -181,18 +180,18 @@ func TestMailTemplateProjection_reduces(t *testing.T) {
name: "instance.reduceChanged",
reduce: (&mailTemplateProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.MailTemplateChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.MailTemplateChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"template": "PHRhYmxlPjwvdGFibGU+"
}`),
- ), instance.MailTemplateChangedEventMapper),
+ ), instance.MailTemplateChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -213,16 +212,16 @@ func TestMailTemplateProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&mailTemplateProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/main_test.go b/internal/query/projection/main_test.go
index 2cf61fe540..09754b140e 100644
--- a/internal/query/projection/main_test.go
+++ b/internal/query/projection/main_test.go
@@ -25,7 +25,12 @@ func eventstoreExpect(t *testing.T, expects ...expect) *eventstore.Eventstore {
for _, e := range expects {
e(m)
}
- es := eventstore.NewEventstore(eventstore.TestConfig(m))
+ es := eventstore.NewEventstore(
+ &eventstore.Config{
+ Querier: m.MockQuerier,
+ Pusher: m.MockPusher,
+ },
+ )
iam_repo.RegisterEventMappers(es)
org.RegisterEventMappers(es)
usr_repo.RegisterEventMappers(es)
@@ -37,27 +42,18 @@ func eventstoreExpect(t *testing.T, expects ...expect) *eventstore.Eventstore {
return es
}
-func expectFilter(events ...*repository.Event) expect {
- return func(m *mock.MockRepository) {
- m.ExpectFilterEvents(events...)
- }
-}
-
func eventFromEventPusher(event eventstore.Command) *repository.Event {
data, _ := eventstore.EventData(event)
return &repository.Event{
- ID: "",
- Sequence: 0,
- PreviousAggregateSequence: 0,
- PreviousAggregateTypeSequence: 0,
- CreationDate: time.Time{},
- Type: repository.EventType(event.Type()),
- Data: data,
- EditorService: event.EditorService(),
- EditorUser: event.EditorUser(),
- Version: repository.Version(event.Aggregate().Version),
- AggregateID: event.Aggregate().ID,
- AggregateType: repository.AggregateType(event.Aggregate().Type),
- ResourceOwner: sql.NullString{String: event.Aggregate().ResourceOwner, Valid: event.Aggregate().ResourceOwner != ""},
+ ID: "",
+ Seq: 0,
+ CreationDate: time.Time{},
+ Typ: event.Type(),
+ Data: data,
+ EditorUser: event.Creator(),
+ Version: event.Aggregate().Version,
+ AggregateID: event.Aggregate().ID,
+ AggregateType: event.Aggregate().Type,
+ ResourceOwner: sql.NullString{String: event.Aggregate().ResourceOwner, Valid: event.Aggregate().ResourceOwner != ""},
}
}
diff --git a/internal/query/projection/member.go b/internal/query/projection/member.go
index 3c6f0af184..364f6b1e06 100644
--- a/internal/query/projection/member.go
+++ b/internal/query/projection/member.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/member"
)
@@ -26,17 +25,17 @@ const (
)
var (
- memberColumns = []*crdb.Column{
- crdb.NewColumn(MemberCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(MemberChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(MemberUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(MemberUserResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(MemberUserOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(MemberRolesCol, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(MemberSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(MemberResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(MemberInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(MemberOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+ memberColumns = []*handler.InitColumn{
+ handler.NewColumn(MemberCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(MemberChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(MemberUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(MemberUserResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(MemberUserOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(MemberRolesCol, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(MemberSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(MemberResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(MemberInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(MemberOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
}
)
@@ -67,9 +66,9 @@ func reduceMemberAdded(e member.MemberAddedEvent, userResourceOwner string, opts
handler.NewCol(MemberUserIDCol, e.UserID),
handler.NewCol(MemberUserResourceOwner, userResourceOwner),
handler.NewCol(MemberUserOwnerRemoved, false),
- handler.NewCol(MemberRolesCol, database.StringArray(e.Roles)),
- handler.NewCol(MemberCreationDate, e.CreationDate()),
- handler.NewCol(MemberChangeDate, e.CreationDate()),
+ handler.NewCol(MemberRolesCol, database.TextArray[string](e.Roles)),
+ handler.NewCol(MemberCreationDate, e.CreatedAt()),
+ handler.NewCol(MemberChangeDate, e.CreatedAt()),
handler.NewCol(MemberSequence, e.Sequence()),
handler.NewCol(MemberResourceOwner, e.Aggregate().ResourceOwner),
handler.NewCol(MemberInstanceID, e.Aggregate().InstanceID),
@@ -80,14 +79,14 @@ func reduceMemberAdded(e member.MemberAddedEvent, userResourceOwner string, opts
config = opt(config)
}
- return crdb.NewCreateStatement(&e, config.cols), nil
+ return handler.NewCreateStatement(&e, config.cols), nil
}
func reduceMemberChanged(e member.MemberChangedEvent, opts ...reduceMemberOpt) (*handler.Statement, error) {
config := reduceMemberConfig{
cols: []handler.Column{
- handler.NewCol(MemberRolesCol, database.StringArray(e.Roles)),
- handler.NewCol(MemberChangeDate, e.CreationDate()),
+ handler.NewCol(MemberRolesCol, database.TextArray[string](e.Roles)),
+ handler.NewCol(MemberChangeDate, e.CreatedAt()),
handler.NewCol(MemberSequence, e.Sequence()),
},
conds: []handler.Condition{
@@ -99,7 +98,7 @@ func reduceMemberChanged(e member.MemberChangedEvent, opts ...reduceMemberOpt) (
config = opt(config)
}
- return crdb.NewUpdateStatement(&e, config.cols, config.conds), nil
+ return handler.NewUpdateStatement(&e, config.cols, config.conds), nil
}
func reduceMemberCascadeRemoved(e member.MemberCascadeRemovedEvent, opts ...reduceMemberOpt) (*handler.Statement, error) {
@@ -112,7 +111,7 @@ func reduceMemberCascadeRemoved(e member.MemberCascadeRemovedEvent, opts ...redu
for _, opt := range opts {
config = opt(config)
}
- return crdb.NewDeleteStatement(&e, config.conds), nil
+ return handler.NewDeleteStatement(&e, config.conds), nil
}
func reduceMemberRemoved(e eventstore.Event, opts ...reduceMemberOpt) (*handler.Statement, error) {
@@ -125,10 +124,10 @@ func reduceMemberRemoved(e eventstore.Event, opts ...reduceMemberOpt) (*handler.
for _, opt := range opts {
config = opt(config)
}
- return crdb.NewDeleteStatement(e, config.conds), nil
+ return handler.NewDeleteStatement(e, config.conds), nil
}
-func multiReduceMemberOwnerRemoved(e eventstore.Event, opts ...reduceMemberOpt) func(eventstore.Event) crdb.Exec {
+func multiReduceMemberOwnerRemoved(e eventstore.Event, opts ...reduceMemberOpt) func(eventstore.Event) handler.Exec {
config := reduceMemberConfig{
conds: []handler.Condition{
handler.NewCond(MemberInstanceID, e.Aggregate().InstanceID),
@@ -140,7 +139,7 @@ func multiReduceMemberOwnerRemoved(e eventstore.Event, opts ...reduceMemberOpt)
config = opt(config)
}
- return crdb.AddDeleteStatement(
+ return handler.AddDeleteStatement(
config.conds,
)
}
@@ -161,25 +160,25 @@ func memberUserOwnerRemovedConds(e eventstore.Event, opts ...reduceMemberOpt) []
func memberUserOwnerRemovedCols(e eventstore.Event) []handler.Column {
return []handler.Column{
- handler.NewCol(MemberChangeDate, e.CreationDate()),
+ handler.NewCol(MemberChangeDate, e.CreatedAt()),
handler.NewCol(MemberSequence, e.Sequence()),
handler.NewCol(MemberUserOwnerRemoved, true),
}
}
func reduceMemberUserOwnerRemoved(e eventstore.Event, opts ...reduceMemberOpt) (*handler.Statement, error) {
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
memberUserOwnerRemovedConds(e, opts...),
), nil
}
-func multiReduceMemberUserOwnerRemoved(e eventstore.Event, opts ...reduceMemberOpt) func(eventstore.Event) crdb.Exec {
- return crdb.AddDeleteStatement(
+func multiReduceMemberUserOwnerRemoved(e eventstore.Event, opts ...reduceMemberOpt) func(eventstore.Event) handler.Exec {
+ return handler.AddDeleteStatement(
memberUserOwnerRemovedConds(e, opts...),
)
}
-func setMemberContext(event eventstore.Aggregate) context.Context {
- return authz.WithInstanceID(context.Background(), event.InstanceID)
+func setMemberContext(aggregate *eventstore.Aggregate) context.Context {
+ return authz.WithInstanceID(context.Background(), aggregate.InstanceID)
}
diff --git a/internal/query/projection/message_text_test.go b/internal/query/projection/message_text_test.go
index 695829dde4..0fb3f14410 100644
--- a/internal/query/projection/message_text_test.go
+++ b/internal/query/projection/message_text_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,22 +24,22 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceAdded Title",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Title",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&messageTextProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -64,22 +63,22 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceAdded PreHeader",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "PreHeader",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&messageTextProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -103,22 +102,22 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceAdded Subject",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Subject",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&messageTextProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -142,22 +141,22 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceAdded Greeting",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Greeting",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&messageTextProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -181,22 +180,22 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceAdded Text",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&messageTextProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -220,22 +219,22 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceAdded ButtonText",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "ButtonText",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&messageTextProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -259,22 +258,22 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceAdded Footer",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextSetEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextSetEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Footer",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), org.CustomTextSetEventMapper),
+ ), org.CustomTextSetEventMapper),
},
reduce: (&messageTextProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -298,21 +297,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved Title",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Title",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -334,17 +333,17 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MessageTextInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -360,21 +359,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved PreHeader",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "PreHeader",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -396,21 +395,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved Subject",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Subject",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -432,21 +431,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved Greeting",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Greeting",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -468,21 +467,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved Text",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Text",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -504,21 +503,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved ButtonText",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "ButtonText",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -540,21 +539,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "org reduceRemoved Footer",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Footer",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextRemovedEventMapper),
+ ), org.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -577,20 +576,20 @@ func TestMessageTextProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (&messageTextProjection{}).reduceTemplateRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.CustomTextTemplateRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.CustomTextTemplateRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"key": "Title",
"language": "en",
"template": "InitCode"
}`),
- ), org.CustomTextTemplateRemovedEventMapper),
+ ), org.CustomTextTemplateRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -610,21 +609,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (&messageTextProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.CustomTextSetEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.CustomTextSetEventType,
+ instance.AggregateType,
+ []byte(`{
"key": "Title",
"language": "en",
"template": "InitCode",
"text": "Test"
}`),
- ), instance.CustomTextSetEventMapper),
+ ), instance.CustomTextSetEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -648,21 +647,21 @@ func TestMessageTextProjection_reduces(t *testing.T) {
{
name: "instance reduceRemoved Title",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.CustomTextRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.CustomTextRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"key": "Title",
"language": "en",
"template": "InitCode"
}`),
- ), instance.CustomTextRemovedEventMapper),
+ ), instance.CustomTextRemovedEventMapper),
},
reduce: (&messageTextProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -685,16 +684,16 @@ func TestMessageTextProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&messageTextProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/message_texts.go b/internal/query/projection/message_texts.go
index 43ede0d07f..fd6af6c1ab 100644
--- a/internal/query/projection/message_texts.go
+++ b/internal/query/projection/message_texts.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -34,46 +34,47 @@ const (
MessageTextOwnerRemovedCol = "owner_removed"
)
-type messageTextProjection struct {
- crdb.StatementHandler
+type messageTextProjection struct{}
+
+func newMessageTextProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(messageTextProjection))
}
-func newMessageTextProjection(ctx context.Context, config crdb.StatementHandlerConfig) *messageTextProjection {
- p := new(messageTextProjection)
- config.ProjectionName = MessageTextTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(MessageTextAggregateIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(MessageTextInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(MessageTextCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(MessageTextChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(MessageTextSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(MessageTextStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(MessageTextTypeCol, crdb.ColumnTypeText),
- crdb.NewColumn(MessageTextLanguageCol, crdb.ColumnTypeText),
- crdb.NewColumn(MessageTextTitleCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MessageTextPreHeaderCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MessageTextSubjectCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MessageTextGreetingCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MessageTextTextCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MessageTextButtonTextCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MessageTextFooterCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MessageTextOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*messageTextProjection) Name() string {
+ return MessageTextTable
+}
+
+func (*messageTextProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(MessageTextAggregateIDCol, handler.ColumnTypeText),
+ handler.NewColumn(MessageTextInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(MessageTextCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(MessageTextChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(MessageTextSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(MessageTextStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(MessageTextTypeCol, handler.ColumnTypeText),
+ handler.NewColumn(MessageTextLanguageCol, handler.ColumnTypeText),
+ handler.NewColumn(MessageTextTitleCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MessageTextPreHeaderCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MessageTextSubjectCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MessageTextGreetingCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MessageTextTextCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MessageTextButtonTextCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MessageTextFooterCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MessageTextOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(MessageTextInstanceIDCol, MessageTextAggregateIDCol, MessageTextTypeCol, MessageTextLanguageCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{MessageTextOwnerRemovedCol})),
+ handler.NewPrimaryKey(MessageTextInstanceIDCol, MessageTextAggregateIDCol, MessageTextTypeCol, MessageTextLanguageCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{MessageTextOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *messageTextProjection) reducers() []handler.AggregateReducer {
+func (p *messageTextProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.CustomTextSetEventType,
Reduce: p.reduceAdded,
@@ -94,7 +95,7 @@ func (p *messageTextProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.CustomTextSetEventType,
Reduce: p.reduceAdded,
@@ -127,7 +128,7 @@ func (p *messageTextProjection) reduceAdded(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-2n90r", "reduce.wrong.event.type %v", []eventstore.EventType{org.CustomTextSetEventType, instance.CustomTextSetEventType})
}
if !isMessageTemplate(templateEvent.Template) {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
cols := []handler.Column{
@@ -161,7 +162,7 @@ func (p *messageTextProjection) reduceAdded(event eventstore.Event) (*handler.St
if isFooterText(templateEvent.Key) {
cols = append(cols, handler.NewCol(MessageTextFooterCol, templateEvent.Text))
}
- return crdb.NewUpsertStatement(
+ return handler.NewUpsertStatement(
&templateEvent,
[]handler.Column{
handler.NewCol(MessageTextInstanceIDCol, nil),
@@ -184,7 +185,7 @@ func (p *messageTextProjection) reduceRemoved(event eventstore.Event) (*handler.
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-fm0ge", "reduce.wrong.event.type %v", []eventstore.EventType{org.CustomTextRemovedEventType, instance.CustomTextRemovedEventType})
}
if !isMessageTemplate(templateEvent.Template) {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
cols := []handler.Column{
handler.NewCol(MessageTextChangeDateCol, templateEvent.CreationDate()),
@@ -211,7 +212,7 @@ func (p *messageTextProjection) reduceRemoved(event eventstore.Event) (*handler.
if isFooterText(templateEvent.Key) {
cols = append(cols, handler.NewCol(MessageTextFooterCol, ""))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&templateEvent,
cols,
[]handler.Condition{
@@ -234,9 +235,9 @@ func (p *messageTextProjection) reduceTemplateRemoved(event eventstore.Event) (*
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-2n9rs", "reduce.wrong.event.type %s", org.CustomTextTemplateRemovedEventType)
}
if !isMessageTemplate(templateEvent.Template) {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(MessageTextAggregateIDCol, templateEvent.Aggregate().ID),
@@ -253,7 +254,7 @@ func (p *messageTextProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-mLsQw", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(MessageTextInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/milestones.go b/internal/query/projection/milestones.go
index dbbf22a603..0ac5e81842 100644
--- a/internal/query/projection/milestones.go
+++ b/internal/query/projection/milestones.go
@@ -3,11 +3,11 @@ package projection
import (
"context"
"strconv"
- "strings"
+ internal_authz "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/milestone"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -26,34 +26,38 @@ const (
)
type milestoneProjection struct {
- crdb.StatementHandler
+ systemUsers map[string]*internal_authz.SystemAPIUser
}
-func newMilestoneProjection(ctx context.Context, config crdb.StatementHandlerConfig) *milestoneProjection {
- p := new(milestoneProjection)
- config.ProjectionName = MilestonesProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(MilestoneColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(MilestoneColumnType, crdb.ColumnTypeEnum),
- crdb.NewColumn(MilestoneColumnReachedDate, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(MilestoneColumnPushedDate, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(MilestoneColumnPrimaryDomain, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MilestoneColumnIgnoreClientIDs, crdb.ColumnTypeTextArray, crdb.Nullable()),
+func newMilestoneProjection(ctx context.Context, config handler.Config, systemUsers map[string]*internal_authz.SystemAPIUser) *handler.Handler {
+ return handler.NewHandler(ctx, &config, &milestoneProjection{systemUsers: systemUsers})
+}
+
+func (*milestoneProjection) Name() string {
+ return MilestonesProjectionTable
+}
+
+func (*milestoneProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(MilestoneColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(MilestoneColumnType, handler.ColumnTypeEnum),
+ handler.NewColumn(MilestoneColumnReachedDate, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(MilestoneColumnPushedDate, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(MilestoneColumnPrimaryDomain, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MilestoneColumnIgnoreClientIDs, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(MilestoneColumnInstanceID, MilestoneColumnType),
+ handler.NewPrimaryKey(MilestoneColumnInstanceID, MilestoneColumnType),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *milestoneProjection) reducers() []handler.AggregateReducer {
+// Reducers implements handler.Projection.
+func (p *milestoneProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceAddedEventType,
Reduce: p.reduceInstanceAdded,
@@ -70,7 +74,7 @@ func (p *milestoneProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.ProjectAddedType,
Reduce: p.reduceProjectAdded,
@@ -91,7 +95,7 @@ func (p *milestoneProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
// user.UserTokenAddedType is not emitted on creation of personal access tokens
// PATs have no effect on milestone.AuthenticationSucceededOnApplication or milestone.AuthenticationSucceededOnInstance
@@ -102,7 +106,7 @@ func (p *milestoneProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: milestone.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: milestone.PushedEventType,
Reduce: p.reduceMilestonePushed,
@@ -118,18 +122,18 @@ func (p *milestoneProjection) reduceInstanceAdded(event eventstore.Event) (*hand
return nil, err
}
allTypes := milestone.AllTypes()
- statements := make([]func(eventstore.Event) crdb.Exec, 0, len(allTypes))
+ statements := make([]func(eventstore.Event) handler.Exec, 0, len(allTypes))
for _, msType := range allTypes {
createColumns := []handler.Column{
handler.NewCol(MilestoneColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCol(MilestoneColumnType, msType),
}
if msType == milestone.InstanceCreated {
- createColumns = append(createColumns, handler.NewCol(MilestoneColumnReachedDate, event.CreationDate()))
+ createColumns = append(createColumns, handler.NewCol(MilestoneColumnReachedDate, event.CreatedAt()))
}
- statements = append(statements, crdb.AddCreateStatement(createColumns))
+ statements = append(statements, handler.AddCreateStatement(createColumns))
}
- return crdb.NewMultiStatement(e, statements...), nil
+ return handler.NewMultiStatement(e, statements...), nil
}
func (p *milestoneProjection) reduceInstanceDomainPrimarySet(event eventstore.Event) (*handler.Statement, error) {
@@ -137,14 +141,14 @@ func (p *milestoneProjection) reduceInstanceDomainPrimarySet(event eventstore.Ev
if err != nil {
return nil, err
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(MilestoneColumnPrimaryDomain, e.Domain),
},
[]handler.Condition{
handler.NewCond(MilestoneColumnInstanceID, e.Aggregate().InstanceID),
- crdb.NewIsNullCond(MilestoneColumnPushedDate),
+ handler.NewIsNullCond(MilestoneColumnPushedDate),
},
), nil
}
@@ -184,33 +188,33 @@ func (p *milestoneProjection) reduceUserTokenAdded(event eventstore.Event) (*han
if err != nil {
return nil, err
}
- statements := []func(eventstore.Event) crdb.Exec{
- crdb.AddUpdateStatement(
+ statements := []func(eventstore.Event) handler.Exec{
+ handler.AddUpdateStatement(
[]handler.Column{
- handler.NewCol(MilestoneColumnReachedDate, event.CreationDate()),
+ handler.NewCol(MilestoneColumnReachedDate, event.CreatedAt()),
},
[]handler.Condition{
handler.NewCond(MilestoneColumnInstanceID, event.Aggregate().InstanceID),
handler.NewCond(MilestoneColumnType, milestone.AuthenticationSucceededOnInstance),
- crdb.NewIsNullCond(MilestoneColumnReachedDate),
+ handler.NewIsNullCond(MilestoneColumnReachedDate),
},
),
}
// We ignore authentications without app, for example JWT profile or PAT
if e.ApplicationID != "" {
- statements = append(statements, crdb.AddUpdateStatement(
+ statements = append(statements, handler.AddUpdateStatement(
[]handler.Column{
- handler.NewCol(MilestoneColumnReachedDate, event.CreationDate()),
+ handler.NewCol(MilestoneColumnReachedDate, event.CreatedAt()),
},
[]handler.Condition{
handler.NewCond(MilestoneColumnInstanceID, event.Aggregate().InstanceID),
handler.NewCond(MilestoneColumnType, milestone.AuthenticationSucceededOnApplication),
- crdb.Not(crdb.NewTextArrayContainsCond(MilestoneColumnIgnoreClientIDs, e.ApplicationID)),
- crdb.NewIsNullCond(MilestoneColumnReachedDate),
+ handler.Not(handler.NewTextArrayContainsCond(MilestoneColumnIgnoreClientIDs, e.ApplicationID)),
+ handler.NewIsNullCond(MilestoneColumnReachedDate),
},
))
}
- return crdb.NewMultiStatement(e, statements...), nil
+ return handler.NewMultiStatement(e, statements...), nil
}
func (p *milestoneProjection) reduceInstanceRemoved(event eventstore.Event) (*handler.Statement, error) {
@@ -226,10 +230,10 @@ func (p *milestoneProjection) reduceMilestonePushed(event eventstore.Event) (*ha
return nil, err
}
if e.MilestoneType != milestone.InstanceDeleted {
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(MilestoneColumnPushedDate, event.CreationDate()),
+ handler.NewCol(MilestoneColumnPushedDate, event.CreatedAt()),
},
[]handler.Condition{
handler.NewCond(MilestoneColumnInstanceID, event.Aggregate().InstanceID),
@@ -237,7 +241,7 @@ func (p *milestoneProjection) reduceMilestonePushed(event eventstore.Event) (*ha
},
), nil
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(MilestoneColumnInstanceID, event.Aggregate().InstanceID),
@@ -248,7 +252,7 @@ func (p *milestoneProjection) reduceMilestonePushed(event eventstore.Event) (*ha
func (p *milestoneProjection) reduceReachedIfUserEventFunc(msType milestone.Type) func(event eventstore.Event) (*handler.Statement, error) {
return func(event eventstore.Event) (*handler.Statement, error) {
if p.isSystemEvent(event) {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
return p.reduceReachedFunc(msType)(event)
}
@@ -256,40 +260,46 @@ func (p *milestoneProjection) reduceReachedIfUserEventFunc(msType milestone.Type
func (p *milestoneProjection) reduceReachedFunc(msType milestone.Type) func(event eventstore.Event) (*handler.Statement, error) {
return func(event eventstore.Event) (*handler.Statement, error) {
- return crdb.NewUpdateStatement(event, []handler.Column{
- handler.NewCol(MilestoneColumnReachedDate, event.CreationDate()),
+ return handler.NewUpdateStatement(event, []handler.Column{
+ handler.NewCol(MilestoneColumnReachedDate, event.CreatedAt()),
},
[]handler.Condition{
handler.NewCond(MilestoneColumnInstanceID, event.Aggregate().InstanceID),
handler.NewCond(MilestoneColumnType, msType),
- crdb.NewIsNullCond(MilestoneColumnReachedDate),
+ handler.NewIsNullCond(MilestoneColumnReachedDate),
}), nil
}
}
func (p *milestoneProjection) reduceAppConfigAdded(event eventstore.Event, clientID string) (*handler.Statement, error) {
if !p.isSystemEvent(event) {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- crdb.NewArrayAppendCol(MilestoneColumnIgnoreClientIDs, clientID),
+ handler.NewArrayAppendCol(MilestoneColumnIgnoreClientIDs, clientID),
},
[]handler.Condition{
handler.NewCond(MilestoneColumnInstanceID, event.Aggregate().InstanceID),
handler.NewCond(MilestoneColumnType, milestone.AuthenticationSucceededOnApplication),
- crdb.NewIsNullCond(MilestoneColumnReachedDate),
+ handler.NewIsNullCond(MilestoneColumnReachedDate),
},
), nil
}
func (p *milestoneProjection) isSystemEvent(event eventstore.Event) bool {
- if userId, err := strconv.Atoi(event.EditorUser()); err == nil && userId > 0 {
+ if userId, err := strconv.Atoi(event.Creator()); err == nil && userId > 0 {
return false
}
- lowerEditorService := strings.ToLower(event.EditorService())
- return lowerEditorService == "" ||
- lowerEditorService == "system" ||
- lowerEditorService == "system-api"
+
+ // check if it is a hard coded event creator
+ for _, creator := range []string{"", "system", "OIDC", "LOGIN", "SYSTEM"} {
+ if creator == event.Creator() {
+ return true
+ }
+ }
+
+ _, ok := p.systemUsers[event.Creator()]
+ return ok
}
diff --git a/internal/query/projection/milestones_test.go b/internal/query/projection/milestones_test.go
index 5138fc1573..fd606538a7 100644
--- a/internal/query/projection/milestones_test.go
+++ b/internal/query/projection/milestones_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/milestone"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -30,7 +29,7 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceInstanceAdded",
args: args{
event: getEvent(timedTestEvent(
- repository.EventType(instance.InstanceAddedEventType),
+ instance.InstanceAddedEventType,
instance.AggregateType,
[]byte(`{}`),
now,
@@ -38,9 +37,8 @@ func TestMilestonesProjection_reduces(t *testing.T) {
},
reduce: (&milestoneProjection{}).reduceInstanceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -94,16 +92,15 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceInstancePrimaryDomainSet",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.InstanceDomainPrimarySetEventType),
+ instance.InstanceDomainPrimarySetEventType,
instance.AggregateType,
[]byte(`{"domain": "my.domain"}`),
), instance.DomainPrimarySetEventMapper),
},
reduce: (&milestoneProjection{}).reduceInstanceDomainPrimarySet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -121,7 +118,7 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceProjectAdded",
args: args{
event: getEvent(timedTestEvent(
- repository.EventType(project.ProjectAddedType),
+ project.ProjectAddedType,
project.AggregateType,
[]byte(`{}`),
now,
@@ -129,9 +126,8 @@ func TestMilestonesProjection_reduces(t *testing.T) {
},
reduce: (&milestoneProjection{}).reduceProjectAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -150,7 +146,7 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceApplicationAdded",
args: args{
event: getEvent(timedTestEvent(
- repository.EventType(project.ApplicationAddedType),
+ project.ApplicationAddedType,
project.AggregateType,
[]byte(`{}`),
now,
@@ -158,9 +154,8 @@ func TestMilestonesProjection_reduces(t *testing.T) {
},
reduce: (&milestoneProjection{}).reduceApplicationAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -179,33 +174,31 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceOIDCConfigAdded user event",
args: args{
event: getEvent(testEvent(
- repository.EventType(project.OIDCConfigAddedType),
+ project.OIDCConfigAddedType,
project.AggregateType,
[]byte(`{}`),
), project.OIDCConfigAddedEventMapper),
},
reduce: (&milestoneProjection{}).reduceOIDCConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
- executer: &testExecuter{},
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
+ executer: &testExecuter{},
},
},
{
name: "reduceOIDCConfigAdded system event",
args: args{
event: getEvent(toSystemEvent(testEvent(
- repository.EventType(project.OIDCConfigAddedType),
+ project.OIDCConfigAddedType,
project.AggregateType,
[]byte(`{"clientId": "client-id"}`),
)), project.OIDCConfigAddedEventMapper),
},
reduce: (&milestoneProjection{}).reduceOIDCConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -224,33 +217,31 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceAPIConfigAdded user event",
args: args{
event: getEvent(testEvent(
- repository.EventType(project.APIConfigAddedType),
+ project.APIConfigAddedType,
project.AggregateType,
[]byte(`{}`),
), project.APIConfigAddedEventMapper),
},
reduce: (&milestoneProjection{}).reduceAPIConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
- executer: &testExecuter{},
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
+ executer: &testExecuter{},
},
},
{
name: "reduceAPIConfigAdded system event",
args: args{
event: getEvent(toSystemEvent(testEvent(
- repository.EventType(project.APIConfigAddedType),
+ project.APIConfigAddedType,
project.AggregateType,
[]byte(`{"clientId": "client-id"}`),
)), project.APIConfigAddedEventMapper),
},
reduce: (&milestoneProjection{}).reduceAPIConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -269,7 +260,7 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceUserTokenAdded",
args: args{
event: getEvent(timedTestEvent(
- repository.EventType(user.UserTokenAddedType),
+ user.UserTokenAddedType,
user.AggregateType,
[]byte(`{"applicationId": "client-id"}`),
now,
@@ -277,9 +268,8 @@ func TestMilestonesProjection_reduces(t *testing.T) {
},
reduce: (&milestoneProjection{}).reduceUserTokenAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
// TODO: This can be optimized to only use one statement with OR
executions: []execution{
@@ -297,7 +287,7 @@ func TestMilestonesProjection_reduces(t *testing.T) {
now,
"instance-id",
milestone.AuthenticationSucceededOnApplication,
- database.StringArray{"client-id"},
+ database.TextArray[string]{"client-id"},
},
},
},
@@ -308,7 +298,7 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceInstanceRemoved",
args: args{
event: getEvent(timedTestEvent(
- repository.EventType(instance.InstanceRemovedEventType),
+ instance.InstanceRemovedEventType,
instance.AggregateType,
[]byte(`{}`),
now,
@@ -316,9 +306,8 @@ func TestMilestonesProjection_reduces(t *testing.T) {
},
reduce: (&milestoneProjection{}).reduceInstanceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -337,7 +326,7 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceMilestonePushed normal milestone",
args: args{
event: getEvent(timedTestEvent(
- repository.EventType(milestone.PushedEventType),
+ milestone.PushedEventType,
milestone.AggregateType,
[]byte(`{"type": "ProjectCreated"}`),
now,
@@ -345,9 +334,8 @@ func TestMilestonesProjection_reduces(t *testing.T) {
},
reduce: (&milestoneProjection{}).reduceMilestonePushed,
want: wantReduce{
- aggregateType: eventstore.AggregateType("milestone"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("milestone"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -366,16 +354,15 @@ func TestMilestonesProjection_reduces(t *testing.T) {
name: "reduceMilestonePushed instance deleted milestone",
args: args{
event: getEvent(testEvent(
- repository.EventType(milestone.PushedEventType),
+ milestone.PushedEventType,
milestone.AggregateType,
[]byte(`{"type": "InstanceDeleted"}`),
), milestone.PushedEventMapper),
},
reduce: (&milestoneProjection{}).reduceMilestonePushed,
want: wantReduce{
- aggregateType: eventstore.AggregateType("milestone"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("milestone"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/notification_policy.go b/internal/query/projection/notification_policy.go
index d064d4395a..49c8618a2f 100644
--- a/internal/query/projection/notification_policy.go
+++ b/internal/query/projection/notification_policy.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -28,39 +28,40 @@ const (
NotificationPolicyColumnOwnerRemoved = "owner_removed"
)
-type notificationPolicyProjection struct {
- crdb.StatementHandler
+type notificationPolicyProjection struct{}
+
+func newNotificationPolicyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(notificationPolicyProjection))
}
-func newNotificationPolicyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *notificationPolicyProjection {
- p := new(notificationPolicyProjection)
- config.ProjectionName = NotificationPolicyProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(NotificationPolicyColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(NotificationPolicyColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(NotificationPolicyColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(NotificationPolicyColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(NotificationPolicyColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(NotificationPolicyColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(NotificationPolicyColumnStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(NotificationPolicyColumnIsDefault, crdb.ColumnTypeBool),
- crdb.NewColumn(NotificationPolicyColumnPasswordChange, crdb.ColumnTypeBool),
- crdb.NewColumn(NotificationPolicyColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*notificationPolicyProjection) Name() string {
+ return NotificationPolicyProjectionTable
+}
+
+func (*notificationPolicyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(NotificationPolicyColumnID, handler.ColumnTypeText),
+ handler.NewColumn(NotificationPolicyColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(NotificationPolicyColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(NotificationPolicyColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(NotificationPolicyColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(NotificationPolicyColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(NotificationPolicyColumnStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(NotificationPolicyColumnIsDefault, handler.ColumnTypeBool),
+ handler.NewColumn(NotificationPolicyColumnPasswordChange, handler.ColumnTypeBool),
+ handler.NewColumn(NotificationPolicyColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(NotificationPolicyColumnInstanceID, NotificationPolicyColumnID),
+ handler.NewPrimaryKey(NotificationPolicyColumnInstanceID, NotificationPolicyColumnID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *notificationPolicyProjection) reducers() []handler.AggregateReducer {
+func (p *notificationPolicyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.NotificationPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -81,7 +82,7 @@ func (p *notificationPolicyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(NotificationPolicyColumnInstanceID),
@@ -112,7 +113,7 @@ func (p *notificationPolicyProjection) reduceAdded(event eventstore.Event) (*han
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-x02s1m", "reduce.wrong.event.type %v", []eventstore.EventType{org.NotificationPolicyAddedEventType, instance.NotificationPolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(NotificationPolicyColumnCreationDate, policyEvent.CreationDate()),
@@ -144,7 +145,7 @@ func (p *notificationPolicyProjection) reduceChanged(event eventstore.Event) (*h
if policyEvent.PasswordChange != nil {
cols = append(cols, handler.NewCol(NotificationPolicyColumnPasswordChange, *policyEvent.PasswordChange))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -158,7 +159,7 @@ func (p *notificationPolicyProjection) reduceRemoved(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Po2iso2", "reduce.wrong.event.type %s", org.NotificationPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(NotificationPolicyColumnID, policyEvent.Aggregate().ID),
@@ -172,7 +173,7 @@ func (p *notificationPolicyProjection) reduceOwnerRemoved(event eventstore.Event
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-poxi9a", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(DomainPolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/notification_policy_test.go b/internal/query/projection/notification_policy_test.go
index b61fc6a440..b21f33b74b 100644
--- a/internal/query/projection/notification_policy_test.go
+++ b/internal/query/projection/notification_policy_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,19 +24,19 @@ func TestNotificationPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.NotificationPolicyAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.NotificationPolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{
"passwordChange": true
}`),
- ), org.NotificationPolicyAddedEventMapper),
+ ), org.NotificationPolicyAddedEventMapper),
},
reduce: (¬ificationPolicyProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -62,18 +61,18 @@ func TestNotificationPolicyProjection_reduces(t *testing.T) {
name: "org reduceChanged",
reduce: (¬ificationPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.NotificationPolicyChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.NotificationPolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{
"passwordChange": true
}`),
- ), org.NotificationPolicyChangedEventMapper),
+ ), org.NotificationPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -94,16 +93,16 @@ func TestNotificationPolicyProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (¬ificationPolicyProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.NotificationPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.NotificationPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.NotificationPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.NotificationPolicyRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -119,17 +118,17 @@ func TestNotificationPolicyProjection_reduces(t *testing.T) {
}, {
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(NotificationPolicyColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -146,18 +145,18 @@ func TestNotificationPolicyProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (¬ificationPolicyProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.NotificationPolicyAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.NotificationPolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"passwordChange": true
}`),
- ), instance.NotificationPolicyAddedEventMapper),
+ ), instance.NotificationPolicyAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -182,18 +181,18 @@ func TestNotificationPolicyProjection_reduces(t *testing.T) {
name: "instance reduceChanged",
reduce: (¬ificationPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.NotificationPolicyChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.NotificationPolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"passwordChange": true
}`),
- ), instance.NotificationPolicyChangedEventMapper),
+ ), instance.NotificationPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -214,16 +213,16 @@ func TestNotificationPolicyProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (¬ificationPolicyProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/oidc_settings.go b/internal/query/projection/oidc_settings.go
index ee2545b55d..fc53b5260e 100644
--- a/internal/query/projection/oidc_settings.go
+++ b/internal/query/projection/oidc_settings.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -25,39 +25,40 @@ const (
OIDCSettingsColumnRefreshTokenExpiration = "refresh_token_expiration"
)
-type oidcSettingsProjection struct {
- crdb.StatementHandler
+type oidcSettingsProjection struct{}
+
+func newOIDCSettingsProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(oidcSettingsProjection))
}
-func newOIDCSettingsProjection(ctx context.Context, config crdb.StatementHandlerConfig) *oidcSettingsProjection {
- p := new(oidcSettingsProjection)
- config.ProjectionName = OIDCSettingsProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(OIDCSettingsColumnAggregateID, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCSettingsColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(OIDCSettingsColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(OIDCSettingsColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCSettingsColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(OIDCSettingsColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(OIDCSettingsColumnAccessTokenLifetime, crdb.ColumnTypeInt64),
- crdb.NewColumn(OIDCSettingsColumnIdTokenLifetime, crdb.ColumnTypeInt64),
- crdb.NewColumn(OIDCSettingsColumnRefreshTokenIdleExpiration, crdb.ColumnTypeInt64),
- crdb.NewColumn(OIDCSettingsColumnRefreshTokenExpiration, crdb.ColumnTypeInt64),
+func (*oidcSettingsProjection) Name() string {
+ return OIDCSettingsProjectionTable
+}
+
+func (*oidcSettingsProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(OIDCSettingsColumnAggregateID, handler.ColumnTypeText),
+ handler.NewColumn(OIDCSettingsColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OIDCSettingsColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OIDCSettingsColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(OIDCSettingsColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(OIDCSettingsColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(OIDCSettingsColumnAccessTokenLifetime, handler.ColumnTypeInt64),
+ handler.NewColumn(OIDCSettingsColumnIdTokenLifetime, handler.ColumnTypeInt64),
+ handler.NewColumn(OIDCSettingsColumnRefreshTokenIdleExpiration, handler.ColumnTypeInt64),
+ handler.NewColumn(OIDCSettingsColumnRefreshTokenExpiration, handler.ColumnTypeInt64),
},
- crdb.NewPrimaryKey(OIDCSettingsColumnInstanceID, OIDCSettingsColumnAggregateID),
+ handler.NewPrimaryKey(OIDCSettingsColumnInstanceID, OIDCSettingsColumnAggregateID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *oidcSettingsProjection) reducers() []handler.AggregateReducer {
+func (p *oidcSettingsProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.OIDCSettingsAddedEventType,
Reduce: p.reduceOIDCSettingsAdded,
@@ -80,7 +81,7 @@ func (p *oidcSettingsProjection) reduceOIDCSettingsAdded(event eventstore.Event)
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-f9nwf", "reduce.wrong.event.type %s", instance.OIDCSettingsAddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(OIDCSettingsColumnAggregateID, e.Aggregate().ID),
@@ -120,7 +121,7 @@ func (p *oidcSettingsProjection) reduceOIDCSettingsChanged(event eventstore.Even
if e.RefreshTokenExpiration != nil {
columns = append(columns, handler.NewCol(OIDCSettingsColumnRefreshTokenExpiration, *e.RefreshTokenExpiration))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
columns,
[]handler.Condition{
diff --git a/internal/query/projection/oidc_settings_test.go b/internal/query/projection/oidc_settings_test.go
index 46c90987d9..c4d5c7b8e2 100644
--- a/internal/query/projection/oidc_settings_test.go
+++ b/internal/query/projection/oidc_settings_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -24,17 +23,17 @@ func TestOIDCSettingsProjection_reduces(t *testing.T) {
{
name: "reduceOIDCSettingsChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OIDCSettingsChangedEventType),
- instance.AggregateType,
- []byte(`{"accessTokenLifetime": 10000000, "idTokenLifetime": 10000000, "refreshTokenIdleExpiration": 10000000, "refreshTokenExpiration": 10000000}`),
- ), instance.OIDCSettingsChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.OIDCSettingsChangedEventType,
+ instance.AggregateType,
+ []byte(`{"accessTokenLifetime": 10000000, "idTokenLifetime": 10000000, "refreshTokenIdleExpiration": 10000000, "refreshTokenExpiration": 10000000}`),
+ ), instance.OIDCSettingsChangedEventMapper),
},
reduce: (&oidcSettingsProjection{}).reduceOIDCSettingsChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -57,17 +56,17 @@ func TestOIDCSettingsProjection_reduces(t *testing.T) {
{
name: "reduceOIDCSettingsAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.OIDCSettingsAddedEventType),
- instance.AggregateType,
- []byte(`{"accessTokenLifetime": 10000000, "idTokenLifetime": 10000000, "refreshTokenIdleExpiration": 10000000, "refreshTokenExpiration": 10000000}`),
- ), instance.OIDCSettingsAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.OIDCSettingsAddedEventType,
+ instance.AggregateType,
+ []byte(`{"accessTokenLifetime": 10000000, "idTokenLifetime": 10000000, "refreshTokenIdleExpiration": 10000000, "refreshTokenExpiration": 10000000}`),
+ ), instance.OIDCSettingsAddedEventMapper),
},
reduce: (&oidcSettingsProjection{}).reduceOIDCSettingsAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -92,17 +91,17 @@ func TestOIDCSettingsProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(OIDCSettingsColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/org.go b/internal/query/projection/org.go
index 8ba5ae4960..9db19403ce 100644
--- a/internal/query/projection/org.go
+++ b/internal/query/projection/org.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -26,40 +26,42 @@ const (
OrgColumnDomain = "primary_domain"
)
-type orgProjection struct {
- crdb.StatementHandler
+type orgProjection struct{}
+
+func (*orgProjection) Name() string {
+ return OrgProjectionTable
}
-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.Default("")),
+func newOrgProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(orgProjection))
+}
+
+// Init implements [handler.initializer]
+func (p *orgProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(OrgColumnID, handler.ColumnTypeText),
+ handler.NewColumn(OrgColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OrgColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OrgColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(OrgColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(OrgColumnState, handler.ColumnTypeEnum),
+ handler.NewColumn(OrgColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(OrgColumnName, handler.ColumnTypeText),
+ handler.NewColumn(OrgColumnDomain, handler.ColumnTypeText, handler.Default("")),
},
- crdb.NewPrimaryKey(OrgColumnInstanceID, OrgColumnID),
- crdb.WithIndex(crdb.NewIndex("domain", []string{OrgColumnDomain})),
- crdb.WithIndex(crdb.NewIndex("name", []string{OrgColumnName})),
+ handler.NewPrimaryKey(OrgColumnInstanceID, OrgColumnID),
+ handler.WithIndex(handler.NewIndex("domain", []string{OrgColumnDomain})),
+ handler.WithIndex(handler.NewIndex("name", []string{OrgColumnName})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *orgProjection) reducers() []handler.AggregateReducer {
+func (p *orgProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgAddedEventType,
Reduce: p.reduceOrgAdded,
@@ -88,7 +90,7 @@ func (p *orgProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(OrgColumnInstanceID),
@@ -103,7 +105,7 @@ func (p *orgProjection) reduceOrgAdded(event eventstore.Event) (*handler.Stateme
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uYq4r", "reduce.wrong.event.type %s", org.OrgAddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(OrgColumnID, e.Aggregate().ID),
@@ -124,9 +126,9 @@ func (p *orgProjection) reduceOrgChanged(event eventstore.Event) (*handler.State
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Bg8oM", "reduce.wrong.event.type %s", org.OrgChangedEventType)
}
if e.Name == "" {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(OrgColumnChangeDate, e.CreationDate()),
@@ -145,7 +147,7 @@ func (p *orgProjection) reduceOrgDeactivated(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-BApK4", "reduce.wrong.event.type %s", org.OrgDeactivatedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(OrgColumnChangeDate, e.CreationDate()),
@@ -164,7 +166,7 @@ func (p *orgProjection) reduceOrgReactivated(event eventstore.Event) (*handler.S
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-o37De", "reduce.wrong.event.type %s", org.OrgReactivatedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(OrgColumnChangeDate, e.CreationDate()),
@@ -183,7 +185,7 @@ func (p *orgProjection) reducePrimaryDomainSet(event eventstore.Event) (*handler
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-4TbKT", "reduce.wrong.event.type %s", org.OrgDomainPrimarySetEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(OrgColumnChangeDate, e.CreationDate()),
@@ -202,7 +204,7 @@ func (p *orgProjection) reduceOrgRemoved(event eventstore.Event) (*handler.State
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-DgMSg", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(OrgColumnID, e.Aggregate().ID),
diff --git a/internal/query/projection/org_domain.go b/internal/query/projection/org_domain.go
index 6436cab38d..21e03e9225 100644
--- a/internal/query/projection/org_domain.go
+++ b/internal/query/projection/org_domain.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -27,40 +27,41 @@ const (
OrgDomainOwnerRemovedCol = "owner_removed"
)
-type orgDomainProjection struct {
- crdb.StatementHandler
+type orgDomainProjection struct{}
+
+func newOrgDomainProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(orgDomainProjection))
}
-func newOrgDomainProjection(ctx context.Context, config crdb.StatementHandlerConfig) *orgDomainProjection {
- p := new(orgDomainProjection)
- config.ProjectionName = OrgDomainTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(OrgDomainOrgIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OrgDomainInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(OrgDomainCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(OrgDomainChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(OrgDomainSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(OrgDomainDomainCol, crdb.ColumnTypeText),
- crdb.NewColumn(OrgDomainIsVerifiedCol, crdb.ColumnTypeBool),
- crdb.NewColumn(OrgDomainIsPrimaryCol, crdb.ColumnTypeBool),
- crdb.NewColumn(OrgDomainValidationTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(OrgDomainOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*orgDomainProjection) Name() string {
+ return OrgDomainTable
+}
+
+func (*orgDomainProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(OrgDomainOrgIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OrgDomainInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(OrgDomainCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OrgDomainChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OrgDomainSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(OrgDomainDomainCol, handler.ColumnTypeText),
+ handler.NewColumn(OrgDomainIsVerifiedCol, handler.ColumnTypeBool),
+ handler.NewColumn(OrgDomainIsPrimaryCol, handler.ColumnTypeBool),
+ handler.NewColumn(OrgDomainValidationTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(OrgDomainOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(OrgDomainOrgIDCol, OrgDomainDomainCol, OrgDomainInstanceIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{OrgDomainOwnerRemovedCol})),
+ handler.NewPrimaryKey(OrgDomainOrgIDCol, OrgDomainDomainCol, OrgDomainInstanceIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{OrgDomainOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *orgDomainProjection) reducers() []handler.AggregateReducer {
+func (p *orgDomainProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgDomainAddedEventType,
Reduce: p.reduceDomainAdded,
@@ -89,7 +90,7 @@ func (p *orgDomainProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(OrgDomainInstanceIDCol),
@@ -104,7 +105,7 @@ func (p *orgDomainProjection) reduceDomainAdded(event eventstore.Event) (*handle
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-DM2DI", "reduce.wrong.event.type %s", org.OrgDomainAddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(OrgDomainCreationDateCol, e.CreationDate()),
@@ -125,7 +126,7 @@ func (p *orgDomainProjection) reduceDomainVerificationAdded(event eventstore.Eve
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-EBzyu", "reduce.wrong.event.type %s", org.OrgDomainVerificationAddedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(OrgDomainChangeDateCol, e.CreationDate()),
@@ -145,7 +146,7 @@ func (p *orgDomainProjection) reduceDomainVerified(event eventstore.Event) (*han
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-3Rvkr", "reduce.wrong.event.type %s", org.OrgDomainVerifiedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(OrgDomainChangeDateCol, e.CreationDate()),
@@ -165,9 +166,9 @@ func (p *orgDomainProjection) reducePrimaryDomainSet(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-aIuei", "reduce.wrong.event.type %s", org.OrgDomainPrimarySetEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(OrgDomainChangeDateCol, e.CreationDate()),
handler.NewCol(OrgDomainSequenceCol, e.Sequence()),
@@ -179,7 +180,7 @@ func (p *orgDomainProjection) reducePrimaryDomainSet(event eventstore.Event) (*h
handler.NewCond(OrgDomainInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(OrgDomainChangeDateCol, e.CreationDate()),
handler.NewCol(OrgDomainSequenceCol, e.Sequence()),
@@ -199,7 +200,7 @@ func (p *orgDomainProjection) reduceDomainRemoved(event eventstore.Event) (*hand
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-gh1Mx", "reduce.wrong.event.type %s", org.OrgDomainRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(OrgDomainDomainCol, e.Domain),
@@ -215,7 +216,7 @@ func (p *orgDomainProjection) reduceOwnerRemoved(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-dMUKJ", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(OrgDomainInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/org_domain_test.go b/internal/query/projection/org_domain_test.go
index 99c265ecf0..0494177ebf 100644
--- a/internal/query/projection/org_domain_test.go
+++ b/internal/query/projection/org_domain_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,17 +24,17 @@ func TestOrgDomainProjection_reduces(t *testing.T) {
{
name: "reduceDomainAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainAddedEventType),
- org.AggregateType,
- []byte(`{"domain": "domain.new"}`),
- ), org.DomainAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgDomainAddedEventType,
+ org.AggregateType,
+ []byte(`{"domain": "domain.new"}`),
+ ), org.DomainAddedEventMapper),
},
reduce: (&orgDomainProjection{}).reduceDomainAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -59,17 +58,17 @@ func TestOrgDomainProjection_reduces(t *testing.T) {
{
name: "reduceDomainVerificationAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainVerificationAddedEventType),
- org.AggregateType,
- []byte(`{"domain": "domain.new", "validationType": 2}`),
- ), org.DomainVerificationAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgDomainVerificationAddedEventType,
+ org.AggregateType,
+ []byte(`{"domain": "domain.new", "validationType": 2}`),
+ ), org.DomainVerificationAddedEventMapper),
},
reduce: (&orgDomainProjection{}).reduceDomainVerificationAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -90,17 +89,17 @@ func TestOrgDomainProjection_reduces(t *testing.T) {
{
name: "reduceDomainVerified",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainVerifiedEventType),
- org.AggregateType,
- []byte(`{"domain": "domain.new"}`),
- ), org.DomainVerifiedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgDomainVerifiedEventType,
+ org.AggregateType,
+ []byte(`{"domain": "domain.new"}`),
+ ), org.DomainVerifiedEventMapper),
},
reduce: (&orgDomainProjection{}).reduceDomainVerified,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -121,17 +120,17 @@ func TestOrgDomainProjection_reduces(t *testing.T) {
{
name: "reducePrimaryDomainSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainPrimarySetEventType),
- org.AggregateType,
- []byte(`{"domain": "domain.new"}`),
- ), org.DomainPrimarySetEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgDomainPrimarySetEventType,
+ org.AggregateType,
+ []byte(`{"domain": "domain.new"}`),
+ ), org.DomainPrimarySetEventMapper),
},
reduce: (&orgDomainProjection{}).reducePrimaryDomainSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -163,17 +162,17 @@ func TestOrgDomainProjection_reduces(t *testing.T) {
{
name: "reduceDomainRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainRemovedEventType),
- org.AggregateType,
- []byte(`{"domain": "domain.new"}`),
- ), org.DomainRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgDomainRemovedEventType,
+ org.AggregateType,
+ []byte(`{"domain": "domain.new"}`),
+ ), org.DomainRemovedEventMapper),
},
reduce: (&orgDomainProjection{}).reduceDomainRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -192,16 +191,16 @@ func TestOrgDomainProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&orgDomainProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -218,17 +217,17 @@ func TestOrgDomainProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(OrgDomainInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/org_member.go b/internal/query/projection/org_member.go
index b606eee61d..fd8ffc07e0 100644
--- a/internal/query/projection/org_member.go
+++ b/internal/query/projection/org_member.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -18,31 +18,47 @@ const (
)
type orgMemberProjection struct {
- crdb.StatementHandler
+ es handler.EventStore
}
-func newOrgMemberProjection(ctx context.Context, config crdb.StatementHandlerConfig) *orgMemberProjection {
- p := new(orgMemberProjection)
- config.ProjectionName = OrgMemberProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable(
- append(memberColumns, crdb.NewColumn(OrgMemberOrgIDCol, crdb.ColumnTypeText)),
- crdb.NewPrimaryKey(MemberInstanceID, OrgMemberOrgIDCol, MemberUserIDCol),
- crdb.WithIndex(crdb.NewIndex("user_id", []string{MemberUserIDCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
+func newOrgMemberProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, &orgMemberProjection{es: config.Eventstore})
+}
+
+func (*orgMemberProjection) Name() string {
+ return OrgMemberProjectionTable
+}
+
+func (*orgMemberProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable(
+ append(memberColumns, handler.NewColumn(OrgMemberOrgIDCol, handler.ColumnTypeText)),
+ handler.NewPrimaryKey(MemberInstanceID, OrgMemberOrgIDCol, MemberUserIDCol),
+ handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
+ handler.WithIndex(
+ handler.NewIndex("om_instance", []string{MemberInstanceID},
+ handler.WithInclude(
+ MemberCreationDate,
+ MemberChangeDate,
+ MemberUserOwnerRemoved,
+ MemberRolesCol,
+ MemberSequence,
+ MemberResourceOwner,
+ MemberOwnerRemoved,
+ ),
+ ),
+ ),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *orgMemberProjection) reducers() []handler.AggregateReducer {
+func (p *orgMemberProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.MemberAddedEventType,
Reduce: p.reduceAdded,
@@ -67,7 +83,7 @@ func (p *orgMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserRemovedType,
Reduce: p.reduceUserRemoved,
@@ -76,7 +92,7 @@ func (p *orgMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(MemberInstanceID),
@@ -92,7 +108,7 @@ func (p *orgMemberProjection) reduceAdded(event eventstore.Event) (*handler.Stat
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-uYq4r", "reduce.wrong.event.type %s", org.MemberAddedEventType)
}
ctx := setMemberContext(e.Aggregate())
- userOwner, err := getResourceOwnerOfUser(ctx, p.Eventstore, e.Aggregate().InstanceID, e.UserID)
+ userOwner, err := getResourceOwnerOfUser(ctx, p.es, e.Aggregate().InstanceID, e.UserID)
if err != nil {
return nil, err
}
@@ -139,7 +155,7 @@ func (p *orgMemberProjection) reduceOrgRemoved(event eventstore.Event) (*handler
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-jnGAV", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
multiReduceMemberOwnerRemoved(e),
multiReduceMemberUserOwnerRemoved(e),
diff --git a/internal/query/projection/org_member_test.go b/internal/query/projection/org_member_test.go
index b9edf34ba0..dee53b5dbb 100644
--- a/internal/query/projection/org_member_test.go
+++ b/internal/query/projection/org_member_test.go
@@ -10,8 +10,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -30,17 +29,18 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
{
name: "org MemberAddedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MemberAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MemberAddedEventType,
+ org.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role"]
}`),
- ), org.MemberAddedEventMapper),
+ ), org.MemberAddedEventMapper),
},
reduce: (&orgMemberProjection{
- StatementHandler: getStatementHandlerWithFilters(
+ es: newMockEventStore().appendFilterResponse([]eventstore.Event{
user.NewHumanAddedEvent(context.Background(),
&user.NewAggregate("user-id", "org1").Aggregate,
"username1",
@@ -53,11 +53,11 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
"email1",
true,
),
- )(t)}).reduceAdded,
+ }),
+ }).reduceAdded,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -66,7 +66,7 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
"user-id",
"org1",
false,
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
@@ -83,26 +83,26 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
{
name: "org MemberChangedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MemberChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MemberChangedEventType,
+ org.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role", "changed"]
}`),
- ), org.MemberChangedEventMapper),
+ ), org.MemberChangedEventMapper),
},
reduce: (&orgMemberProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.org_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (org_id = $6)",
expectedArgs: []interface{}{
- database.StringArray{"role", "changed"},
+ database.TextArray[string]{"role", "changed"},
anyArg{},
uint64(15),
"instance-id",
@@ -117,19 +117,19 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
{
name: "org MemberCascadeRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MemberCascadeRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MemberCascadeRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"userId": "user-id"
}`),
- ), org.MemberCascadeRemovedEventMapper),
+ ), org.MemberCascadeRemovedEventMapper),
},
reduce: (&orgMemberProjection{}).reduceCascadeRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -147,19 +147,19 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
{
name: "org MemberRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MemberRemovedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MemberRemovedEventType,
+ org.AggregateType,
+ []byte(`{
"userId": "user-id"
}`),
- ), org.MemberRemovedEventMapper),
+ ), org.MemberRemovedEventMapper),
},
reduce: (&orgMemberProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -177,17 +177,17 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
{
name: "user UserRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&orgMemberProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -204,17 +204,17 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
{
name: "org OrgRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- []byte(`{}`),
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ []byte(`{}`),
+ ), org.OrgRemovedEventMapper),
},
reduce: (&orgMemberProjection{}).reduceOrgRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -238,17 +238,17 @@ func TestOrgMemberProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MemberInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/org_metadata.go b/internal/query/projection/org_metadata.go
index 3907bd4ee7..e2e21f4e1e 100644
--- a/internal/query/projection/org_metadata.go
+++ b/internal/query/projection/org_metadata.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,40 +25,40 @@ const (
OrgMetadataColumnOwnerRemoved = "owner_removed"
)
-type orgMetadataProjection struct {
- crdb.StatementHandler
+type orgMetadataProjection struct{}
+
+func (*orgMetadataProjection) Name() string {
+ return OrgMetadataProjectionTable
}
-func newOrgMetadataProjection(ctx context.Context, config crdb.StatementHandlerConfig) *orgMetadataProjection {
- p := new(orgMetadataProjection)
- config.ProjectionName = OrgMetadataProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(OrgMetadataColumnOrgID, crdb.ColumnTypeText),
- crdb.NewColumn(OrgMetadataColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(OrgMetadataColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(OrgMetadataColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(OrgMetadataColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(OrgMetadataColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(OrgMetadataColumnKey, crdb.ColumnTypeText),
- crdb.NewColumn(OrgMetadataColumnValue, crdb.ColumnTypeBytes, crdb.Nullable()),
- crdb.NewColumn(OrgMetadataColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*orgMetadataProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(OrgMetadataColumnOrgID, handler.ColumnTypeText),
+ handler.NewColumn(OrgMetadataColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OrgMetadataColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(OrgMetadataColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(OrgMetadataColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(OrgMetadataColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(OrgMetadataColumnKey, handler.ColumnTypeText),
+ handler.NewColumn(OrgMetadataColumnValue, handler.ColumnTypeBytes, handler.Nullable()),
+ handler.NewColumn(OrgMetadataColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(OrgMetadataColumnInstanceID, OrgMetadataColumnOrgID, OrgMetadataColumnKey),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{OrgMetadataColumnOwnerRemoved})),
+ handler.NewPrimaryKey(OrgMetadataColumnInstanceID, OrgMetadataColumnOrgID, OrgMetadataColumnKey),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{OrgMetadataColumnOwnerRemoved})),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *orgMetadataProjection) reducers() []handler.AggregateReducer {
+func newOrgMetadataProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(orgMetadataProjection))
+}
+
+func (p *orgMetadataProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.MetadataSetType,
Reduce: p.reduceMetadataSet,
@@ -79,7 +79,7 @@ func (p *orgMetadataProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(OrgMetadataColumnInstanceID),
@@ -94,7 +94,7 @@ func (p *orgMetadataProjection) reduceMetadataSet(event eventstore.Event) (*hand
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Ghn53", "reduce.wrong.event.type %s", org.MetadataSetType)
}
- return crdb.NewUpsertStatement(
+ return handler.NewUpsertStatement(
e,
[]handler.Column{
handler.NewCol(OrgMetadataColumnInstanceID, nil),
@@ -119,7 +119,7 @@ func (p *orgMetadataProjection) reduceMetadataRemoved(event eventstore.Event) (*
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Bm542", "reduce.wrong.event.type %s", org.MetadataRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(OrgMetadataColumnOrgID, e.Aggregate().ID),
@@ -137,7 +137,7 @@ func (p *orgMetadataProjection) reduceMetadataRemovedAll(event eventstore.Event)
default:
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Bmnf3", "reduce.wrong.event.type %v", []eventstore.EventType{org.MetadataRemovedAllType, org.OrgRemovedEventType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(OrgMetadataColumnOrgID, event.Aggregate().ID),
@@ -152,7 +152,7 @@ func (p *orgMetadataProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Hkd1f", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(OrgMetadataColumnChangeDate, e.CreationDate()),
diff --git a/internal/query/projection/org_metadata_test.go b/internal/query/projection/org_metadata_test.go
index 034dbddd0b..b0fce9911d 100644
--- a/internal/query/projection/org_metadata_test.go
+++ b/internal/query/projection/org_metadata_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -24,20 +23,20 @@ func TestOrgMetadataProjection_reduces(t *testing.T) {
{
name: "reduceMetadataSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MetadataSetType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MetadataSetType,
+ org.AggregateType,
+ []byte(`{
"key": "key",
"value": "dmFsdWU="
}`),
- ), org.MetadataSetEventMapper),
+ ), org.MetadataSetEventMapper),
},
reduce: (&orgMetadataProjection{}).reduceMetadataSet,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -60,19 +59,19 @@ func TestOrgMetadataProjection_reduces(t *testing.T) {
{
name: "reduceMetadataRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MetadataRemovedType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.MetadataRemovedType,
+ org.AggregateType,
+ []byte(`{
"key": "key"
}`),
- ), org.MetadataRemovedEventMapper),
+ ), org.MetadataRemovedEventMapper),
},
reduce: (&orgMetadataProjection{}).reduceMetadataRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -90,17 +89,17 @@ func TestOrgMetadataProjection_reduces(t *testing.T) {
{
name: "reduceMetadataRemovedAll",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.MetadataRemovedAllType),
- org.AggregateType,
- nil,
- ), org.MetadataRemovedAllEventMapper),
+ event: getEvent(
+ testEvent(
+ org.MetadataRemovedAllType,
+ org.AggregateType,
+ nil,
+ ), org.MetadataRemovedAllEventMapper),
},
reduce: (&orgMetadataProjection{}).reduceMetadataRemovedAll,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -117,17 +116,17 @@ func TestOrgMetadataProjection_reduces(t *testing.T) {
{
name: "reduceOwnerRemoved(org removed)",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
reduce: (&orgMetadataProjection{}).reduceOwnerRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -147,17 +146,17 @@ func TestOrgMetadataProjection_reduces(t *testing.T) {
{
name: "reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MemberInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/org_test.go b/internal/query/projection/org_test.go
index a5f6795fbc..94d72469a7 100644
--- a/internal/query/projection/org_test.go
+++ b/internal/query/projection/org_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,17 +24,17 @@ func TestOrgProjection_reduces(t *testing.T) {
{
name: "reducePrimaryDomainSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDomainPrimarySetEventType),
- org.AggregateType,
- []byte(`{"domain": "domain.new"}`),
- ), org.DomainPrimarySetEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgDomainPrimarySetEventType,
+ org.AggregateType,
+ []byte(`{"domain": "domain.new"}`),
+ ), org.DomainPrimarySetEventMapper),
},
reduce: (&orgProjection{}).reducePrimaryDomainSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -55,17 +54,17 @@ func TestOrgProjection_reduces(t *testing.T) {
{
name: "reduceOrgReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgReactivatedEventType),
- org.AggregateType,
- nil,
- ), org.OrgReactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgReactivatedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgReactivatedEventMapper),
},
reduce: (&orgProjection{}).reduceOrgReactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -85,17 +84,17 @@ func TestOrgProjection_reduces(t *testing.T) {
{
name: "reduceOrgDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgDeactivatedEventType),
- org.AggregateType,
- nil,
- ), org.OrgDeactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgDeactivatedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgDeactivatedEventMapper),
},
reduce: (&orgProjection{}).reduceOrgDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -115,17 +114,17 @@ func TestOrgProjection_reduces(t *testing.T) {
{
name: "reduceOrgChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgChangedEventType),
- org.AggregateType,
- []byte(`{"name": "new name"}`),
- ), org.OrgChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgChangedEventType,
+ org.AggregateType,
+ []byte(`{"name": "new name"}`),
+ ), org.OrgChangedEventMapper),
},
reduce: (&orgProjection{}).reduceOrgChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -145,34 +144,34 @@ func TestOrgProjection_reduces(t *testing.T) {
{
name: "reduceOrgChanged no changes",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgChangedEventType),
- org.AggregateType,
- []byte(`{}`),
- ), org.OrgChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgChangedEventType,
+ org.AggregateType,
+ []byte(`{}`),
+ ), org.OrgChangedEventMapper),
},
reduce: (&orgProjection{}).reduceOrgChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
- executer: &testExecuter{},
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
+ executer: &testExecuter{},
},
},
{
name: "reduceOrgAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgAddedEventType),
- org.AggregateType,
- []byte(`{"name": "name"}`),
- ), org.OrgAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgAddedEventType,
+ org.AggregateType,
+ []byte(`{"name": "name"}`),
+ ), org.OrgAddedEventMapper),
},
reduce: (&orgProjection{}).reduceOrgAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -195,17 +194,17 @@ func TestOrgProjection_reduces(t *testing.T) {
{
name: "reduceOrgRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
reduce: (&orgProjection{}).reduceOrgRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -222,17 +221,17 @@ func TestOrgProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(OrgColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/password_age_policy.go b/internal/query/projection/password_age_policy.go
index f03ee0d553..03e0aee338 100644
--- a/internal/query/projection/password_age_policy.go
+++ b/internal/query/projection/password_age_policy.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -29,41 +29,42 @@ const (
AgePolicyOwnerRemovedCol = "owner_removed"
)
-type passwordAgeProjection struct {
- crdb.StatementHandler
+type passwordAgeProjection struct{}
+
+func newPasswordAgeProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(passwordAgeProjection))
}
-func newPasswordAgeProjection(ctx context.Context, config crdb.StatementHandlerConfig) *passwordAgeProjection {
- p := new(passwordAgeProjection)
- config.ProjectionName = PasswordAgeTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(AgePolicyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AgePolicyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AgePolicyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(AgePolicySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(AgePolicyStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(AgePolicyIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(AgePolicyResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(AgePolicyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(AgePolicyExpireWarnDaysCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(AgePolicyMaxAgeDaysCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(AgePolicyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*passwordAgeProjection) Name() string {
+ return PasswordAgeTable
+}
+
+func (*passwordAgeProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(AgePolicyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AgePolicyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AgePolicyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(AgePolicySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(AgePolicyStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(AgePolicyIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(AgePolicyResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(AgePolicyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(AgePolicyExpireWarnDaysCol, handler.ColumnTypeInt64),
+ handler.NewColumn(AgePolicyMaxAgeDaysCol, handler.ColumnTypeInt64),
+ handler.NewColumn(AgePolicyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(AgePolicyInstanceIDCol, AgePolicyIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{AgePolicyOwnerRemovedCol})),
+ handler.NewPrimaryKey(AgePolicyInstanceIDCol, AgePolicyIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{AgePolicyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *passwordAgeProjection) reducers() []handler.AggregateReducer {
+func (p *passwordAgeProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.PasswordAgePolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -84,7 +85,7 @@ func (p *passwordAgeProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.PasswordAgePolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -115,7 +116,7 @@ func (p *passwordAgeProjection) reduceAdded(event eventstore.Event) (*handler.St
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-CJqF0", "reduce.wrong.event.type %v", []eventstore.EventType{org.PasswordAgePolicyAddedEventType, instance.PasswordAgePolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(AgePolicyCreationDateCol, policyEvent.CreationDate()),
@@ -151,7 +152,7 @@ func (p *passwordAgeProjection) reduceChanged(event eventstore.Event) (*handler.
if policyEvent.MaxAgeDays != nil {
cols = append(cols, handler.NewCol(AgePolicyMaxAgeDaysCol, *policyEvent.MaxAgeDays))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -165,7 +166,7 @@ func (p *passwordAgeProjection) reduceRemoved(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-EtHWB", "reduce.wrong.event.type %s", org.PasswordAgePolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(AgePolicyIDCol, policyEvent.Aggregate().ID),
@@ -179,7 +180,7 @@ func (p *passwordAgeProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-edLs2", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(AgePolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/password_age_policy_test.go b/internal/query/projection/password_age_policy_test.go
index f6c5e801f9..8ce044e785 100644
--- a/internal/query/projection/password_age_policy_test.go
+++ b/internal/query/projection/password_age_policy_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,20 +24,20 @@ func TestPasswordAgeProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PasswordAgePolicyAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.PasswordAgePolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{
"expireWarnDays": 10,
"maxAgeDays": 13
}`),
- ), org.PasswordAgePolicyAddedEventMapper),
+ ), org.PasswordAgePolicyAddedEventMapper),
},
reduce: (&passwordAgeProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -64,19 +63,19 @@ func TestPasswordAgeProjection_reduces(t *testing.T) {
name: "org reduceChanged",
reduce: (&passwordAgeProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PasswordAgePolicyChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.PasswordAgePolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{
"expireWarnDays": 10,
"maxAgeDays": 13
}`),
- ), org.PasswordAgePolicyChangedEventMapper),
+ ), org.PasswordAgePolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -98,16 +97,16 @@ func TestPasswordAgeProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (&passwordAgeProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PasswordAgePolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.PasswordAgePolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.PasswordAgePolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.PasswordAgePolicyRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -124,17 +123,17 @@ func TestPasswordAgeProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(AgePolicyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -151,19 +150,19 @@ func TestPasswordAgeProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (&passwordAgeProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.PasswordAgePolicyAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.PasswordAgePolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"expireWarnDays": 10,
"maxAgeDays": 13
}`),
- ), instance.PasswordAgePolicyAddedEventMapper),
+ ), instance.PasswordAgePolicyAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -189,19 +188,19 @@ func TestPasswordAgeProjection_reduces(t *testing.T) {
name: "instance reduceChanged",
reduce: (&passwordAgeProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.PasswordAgePolicyChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.PasswordAgePolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"expireWarnDays": 10,
"maxAgeDays": 13
}`),
- ), instance.PasswordAgePolicyChangedEventMapper),
+ ), instance.PasswordAgePolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -223,16 +222,16 @@ func TestPasswordAgeProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&passwordAgeProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/password_complexity_policy.go b/internal/query/projection/password_complexity_policy.go
index b683cd556c..96072017dd 100644
--- a/internal/query/projection/password_complexity_policy.go
+++ b/internal/query/projection/password_complexity_policy.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -32,44 +32,45 @@ const (
ComplexityPolicyOwnerRemovedCol = "owner_removed"
)
-type passwordComplexityProjection struct {
- crdb.StatementHandler
+type passwordComplexityProjection struct{}
+
+func newPasswordComplexityProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(passwordComplexityProjection))
}
-func newPasswordComplexityProjection(ctx context.Context, config crdb.StatementHandlerConfig) *passwordComplexityProjection {
- p := new(passwordComplexityProjection)
- config.ProjectionName = PasswordComplexityTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(ComplexityPolicyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(ComplexityPolicyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ComplexityPolicyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ComplexityPolicySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(ComplexityPolicyStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(ComplexityPolicyIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(ComplexityPolicyResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(ComplexityPolicyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(ComplexityPolicyMinLengthCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(ComplexityPolicyHasLowercaseCol, crdb.ColumnTypeBool),
- crdb.NewColumn(ComplexityPolicyHasUppercaseCol, crdb.ColumnTypeBool),
- crdb.NewColumn(ComplexityPolicyHasSymbolCol, crdb.ColumnTypeBool),
- crdb.NewColumn(ComplexityPolicyHasNumberCol, crdb.ColumnTypeBool),
- crdb.NewColumn(ComplexityPolicyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*passwordComplexityProjection) Name() string {
+ return PasswordComplexityTable
+}
+
+func (*passwordComplexityProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(ComplexityPolicyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(ComplexityPolicyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ComplexityPolicyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ComplexityPolicySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(ComplexityPolicyStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(ComplexityPolicyIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(ComplexityPolicyResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(ComplexityPolicyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(ComplexityPolicyMinLengthCol, handler.ColumnTypeInt64),
+ handler.NewColumn(ComplexityPolicyHasLowercaseCol, handler.ColumnTypeBool),
+ handler.NewColumn(ComplexityPolicyHasUppercaseCol, handler.ColumnTypeBool),
+ handler.NewColumn(ComplexityPolicyHasSymbolCol, handler.ColumnTypeBool),
+ handler.NewColumn(ComplexityPolicyHasNumberCol, handler.ColumnTypeBool),
+ handler.NewColumn(ComplexityPolicyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(ComplexityPolicyInstanceIDCol, ComplexityPolicyIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{ComplexityPolicyOwnerRemovedCol})),
+ handler.NewPrimaryKey(ComplexityPolicyInstanceIDCol, ComplexityPolicyIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{ComplexityPolicyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *passwordComplexityProjection) reducers() []handler.AggregateReducer {
+func (p *passwordComplexityProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.PasswordComplexityPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -90,7 +91,7 @@ func (p *passwordComplexityProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.PasswordComplexityPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -121,7 +122,7 @@ func (p *passwordComplexityProjection) reduceAdded(event eventstore.Event) (*han
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-KTHmJ", "reduce.wrong.event.type %v", []eventstore.EventType{org.PasswordComplexityPolicyAddedEventType, instance.PasswordComplexityPolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(ComplexityPolicyCreationDateCol, policyEvent.CreationDate()),
@@ -169,7 +170,7 @@ func (p *passwordComplexityProjection) reduceChanged(event eventstore.Event) (*h
if policyEvent.HasNumber != nil {
cols = append(cols, handler.NewCol(ComplexityPolicyHasNumberCol, *policyEvent.HasNumber))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -183,7 +184,7 @@ func (p *passwordComplexityProjection) reduceRemoved(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-wttCd", "reduce.wrong.event.type %s", org.PasswordComplexityPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(ComplexityPolicyIDCol, policyEvent.Aggregate().ID),
@@ -197,7 +198,7 @@ func (p *passwordComplexityProjection) reduceOwnerRemoved(event eventstore.Event
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-pGTz9", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ComplexityPolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/password_complexity_policy_test.go b/internal/query/projection/password_complexity_policy_test.go
index ceac964704..0428d1ae24 100644
--- a/internal/query/projection/password_complexity_policy_test.go
+++ b/internal/query/projection/password_complexity_policy_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,23 +24,23 @@ func TestPasswordComplexityProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PasswordComplexityPolicyAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.PasswordComplexityPolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{
"minLength": 10,
"hasLowercase": true,
"hasUppercase": true,
"HasNumber": true,
"HasSymbol": true
}`),
- ), org.PasswordComplexityPolicyAddedEventMapper),
+ ), org.PasswordComplexityPolicyAddedEventMapper),
},
reduce: (&passwordComplexityProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -70,22 +69,22 @@ func TestPasswordComplexityProjection_reduces(t *testing.T) {
name: "org reduceChanged",
reduce: (&passwordComplexityProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PasswordComplexityPolicyChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.PasswordComplexityPolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{
"minLength": 11,
"hasLowercase": true,
"hasUppercase": true,
"HasNumber": true,
"HasSymbol": true
}`),
- ), org.PasswordComplexityPolicyChangedEventMapper),
+ ), org.PasswordComplexityPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -110,16 +109,16 @@ func TestPasswordComplexityProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (&passwordComplexityProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PasswordComplexityPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.PasswordComplexityPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.PasswordComplexityPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.PasswordComplexityPolicyRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -136,17 +135,17 @@ func TestPasswordComplexityProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(ComplexityPolicyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -163,22 +162,22 @@ func TestPasswordComplexityProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (&passwordComplexityProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.PasswordComplexityPolicyAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.PasswordComplexityPolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"minLength": 10,
"hasLowercase": true,
"hasUppercase": true,
"HasNumber": true,
"HasSymbol": true
}`),
- ), instance.PasswordComplexityPolicyAddedEventMapper),
+ ), instance.PasswordComplexityPolicyAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -207,22 +206,22 @@ func TestPasswordComplexityProjection_reduces(t *testing.T) {
name: "instance reduceChanged",
reduce: (&passwordComplexityProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.PasswordComplexityPolicyChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.PasswordComplexityPolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"minLength": 10,
"hasLowercase": true,
"hasUppercase": true,
"HasNumber": true,
"HasSymbol": true
}`),
- ), instance.PasswordComplexityPolicyChangedEventMapper),
+ ), instance.PasswordComplexityPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -247,16 +246,16 @@ func TestPasswordComplexityProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&passwordComplexityProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/privacy_policy.go b/internal/query/projection/privacy_policy.go
index b577b5eff8..44ac5794fe 100644
--- a/internal/query/projection/privacy_policy.go
+++ b/internal/query/projection/privacy_policy.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/policy"
@@ -31,43 +31,44 @@ const (
PrivacyPolicyOwnerRemovedCol = "owner_removed"
)
-type privacyPolicyProjection struct {
- crdb.StatementHandler
+type privacyPolicyProjection struct{}
+
+func newPrivacyPolicyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(privacyPolicyProjection))
}
-func newPrivacyPolicyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *privacyPolicyProjection {
- p := new(privacyPolicyProjection)
- config.ProjectionName = PrivacyPolicyTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(PrivacyPolicyIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(PrivacyPolicyCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(PrivacyPolicyChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(PrivacyPolicySequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(PrivacyPolicyStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(PrivacyPolicyIsDefaultCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(PrivacyPolicyResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(PrivacyPolicyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(PrivacyPolicyPrivacyLinkCol, crdb.ColumnTypeText),
- crdb.NewColumn(PrivacyPolicyTOSLinkCol, crdb.ColumnTypeText),
- crdb.NewColumn(PrivacyPolicyHelpLinkCol, crdb.ColumnTypeText),
- crdb.NewColumn(PrivacyPolicySupportEmailCol, crdb.ColumnTypeText),
- crdb.NewColumn(PrivacyPolicyOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*privacyPolicyProjection) Name() string {
+ return PrivacyPolicyTable
+}
+
+func (*privacyPolicyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(PrivacyPolicyIDCol, handler.ColumnTypeText),
+ handler.NewColumn(PrivacyPolicyCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(PrivacyPolicyChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(PrivacyPolicySequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(PrivacyPolicyStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(PrivacyPolicyIsDefaultCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(PrivacyPolicyResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(PrivacyPolicyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(PrivacyPolicyPrivacyLinkCol, handler.ColumnTypeText),
+ handler.NewColumn(PrivacyPolicyTOSLinkCol, handler.ColumnTypeText),
+ handler.NewColumn(PrivacyPolicyHelpLinkCol, handler.ColumnTypeText),
+ handler.NewColumn(PrivacyPolicySupportEmailCol, handler.ColumnTypeText),
+ handler.NewColumn(PrivacyPolicyOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(PrivacyPolicyInstanceIDCol, PrivacyPolicyIDCol),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{PrivacyPolicyOwnerRemovedCol})),
+ handler.NewPrimaryKey(PrivacyPolicyInstanceIDCol, PrivacyPolicyIDCol),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{PrivacyPolicyOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *privacyPolicyProjection) reducers() []handler.AggregateReducer {
+func (p *privacyPolicyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.PrivacyPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -88,7 +89,7 @@ func (p *privacyPolicyProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.PrivacyPolicyAddedEventType,
Reduce: p.reduceAdded,
@@ -119,7 +120,7 @@ func (p *privacyPolicyProjection) reduceAdded(event eventstore.Event) (*handler.
default:
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-kRNh8", "reduce.wrong.event.type %v", []eventstore.EventType{org.PrivacyPolicyAddedEventType, instance.PrivacyPolicyAddedEventType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
&policyEvent,
[]handler.Column{
handler.NewCol(PrivacyPolicyCreationDateCol, policyEvent.CreationDate()),
@@ -163,7 +164,7 @@ func (p *privacyPolicyProjection) reduceChanged(event eventstore.Event) (*handle
if policyEvent.SupportEmail != nil {
cols = append(cols, handler.NewCol(PrivacyPolicySupportEmailCol, *policyEvent.SupportEmail))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
&policyEvent,
cols,
[]handler.Condition{
@@ -177,7 +178,7 @@ func (p *privacyPolicyProjection) reduceRemoved(event eventstore.Event) (*handle
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-FvtGO", "reduce.wrong.event.type %s", org.PrivacyPolicyRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
policyEvent,
[]handler.Condition{
handler.NewCond(PrivacyPolicyIDCol, policyEvent.Aggregate().ID),
@@ -191,7 +192,7 @@ func (p *privacyPolicyProjection) reduceOwnerRemoved(event eventstore.Event) (*h
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-bxJCY", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(PrivacyPolicyInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/privacy_policy_test.go b/internal/query/projection/privacy_policy_test.go
index 630abc6f15..53c147507e 100644
--- a/internal/query/projection/privacy_policy_test.go
+++ b/internal/query/projection/privacy_policy_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
)
@@ -25,21 +24,21 @@ func TestPrivacyPolicyProjection_reduces(t *testing.T) {
{
name: "org reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PrivacyPolicyAddedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.PrivacyPolicyAddedEventType,
+ org.AggregateType,
+ []byte(`{
"tosLink": "http://tos.link",
"privacyLink": "http://privacy.link",
"helpLink": "http://help.link",
"supportEmail": "support@example.com"}`),
- ), org.PrivacyPolicyAddedEventMapper),
+ ), org.PrivacyPolicyAddedEventMapper),
},
reduce: (&privacyPolicyProjection{}).reduceAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -67,20 +66,20 @@ func TestPrivacyPolicyProjection_reduces(t *testing.T) {
name: "org reduceChanged",
reduce: (&privacyPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PrivacyPolicyChangedEventType),
- org.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ org.PrivacyPolicyChangedEventType,
+ org.AggregateType,
+ []byte(`{
"tosLink": "http://tos.link",
"privacyLink": "http://privacy.link",
"helpLink": "http://help.link",
"supportEmail": "support@example.com"}`),
- ), org.PrivacyPolicyChangedEventMapper),
+ ), org.PrivacyPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -104,16 +103,16 @@ func TestPrivacyPolicyProjection_reduces(t *testing.T) {
name: "org reduceRemoved",
reduce: (&privacyPolicyProjection{}).reduceRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.PrivacyPolicyRemovedEventType),
- org.AggregateType,
- nil,
- ), org.PrivacyPolicyRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.PrivacyPolicyRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.PrivacyPolicyRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -129,17 +128,17 @@ func TestPrivacyPolicyProjection_reduces(t *testing.T) {
}, {
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(PrivacyPolicyInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -156,20 +155,20 @@ func TestPrivacyPolicyProjection_reduces(t *testing.T) {
name: "instance reduceAdded",
reduce: (&privacyPolicyProjection{}).reduceAdded,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.PrivacyPolicyAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.PrivacyPolicyAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"tosLink": "http://tos.link",
"privacyLink": "http://privacy.link",
"helpLink": "http://help.link",
"supportEmail": "support@example.com"}`),
- ), instance.PrivacyPolicyAddedEventMapper),
+ ), instance.PrivacyPolicyAddedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -197,20 +196,20 @@ func TestPrivacyPolicyProjection_reduces(t *testing.T) {
name: "instance reduceChanged",
reduce: (&privacyPolicyProjection{}).reduceChanged,
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.PrivacyPolicyChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.PrivacyPolicyChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"tosLink": "http://tos.link",
"privacyLink": "http://privacy.link",
"helpLink": "http://help.link",
"supportEmail": "support@example.com"}`),
- ), instance.PrivacyPolicyChangedEventMapper),
+ ), instance.PrivacyPolicyChangedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -234,16 +233,16 @@ func TestPrivacyPolicyProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&privacyPolicyProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/project.go b/internal/query/projection/project.go
index 0848cad6aa..c02e16f6d7 100644
--- a/internal/query/projection/project.go
+++ b/internal/query/projection/project.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -31,44 +31,45 @@ const (
ProjectColumnOwnerRemoved = "owner_removed"
)
-type projectProjection struct {
- crdb.StatementHandler
+type projectProjection struct{}
+
+func newProjectProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(projectProjection))
}
-func newProjectProjection(ctx context.Context, config crdb.StatementHandlerConfig) *projectProjection {
- p := new(projectProjection)
- config.ProjectionName = ProjectProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(ProjectColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ProjectColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ProjectColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(ProjectColumnState, crdb.ColumnTypeEnum),
- crdb.NewColumn(ProjectColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectColumnName, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectColumnProjectRoleAssertion, crdb.ColumnTypeBool),
- crdb.NewColumn(ProjectColumnProjectRoleCheck, crdb.ColumnTypeBool),
- crdb.NewColumn(ProjectColumnHasProjectCheck, crdb.ColumnTypeBool),
- crdb.NewColumn(ProjectColumnPrivateLabelingSetting, crdb.ColumnTypeEnum),
- crdb.NewColumn(ProjectColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*projectProjection) Name() string {
+ return ProjectProjectionTable
+}
+
+func (*projectProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(ProjectColumnID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ProjectColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ProjectColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(ProjectColumnState, handler.ColumnTypeEnum),
+ handler.NewColumn(ProjectColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(ProjectColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectColumnName, handler.ColumnTypeText),
+ handler.NewColumn(ProjectColumnProjectRoleAssertion, handler.ColumnTypeBool),
+ handler.NewColumn(ProjectColumnProjectRoleCheck, handler.ColumnTypeBool),
+ handler.NewColumn(ProjectColumnHasProjectCheck, handler.ColumnTypeBool),
+ handler.NewColumn(ProjectColumnPrivateLabelingSetting, handler.ColumnTypeEnum),
+ handler.NewColumn(ProjectColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(ProjectColumnInstanceID, ProjectColumnID),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{ProjectColumnResourceOwner})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{ProjectColumnOwnerRemoved})),
+ handler.NewPrimaryKey(ProjectColumnInstanceID, ProjectColumnID),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{ProjectColumnResourceOwner})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{ProjectColumnOwnerRemoved})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *projectProjection) reducers() []handler.AggregateReducer {
+func (p *projectProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.ProjectAddedType,
Reduce: p.reduceProjectAdded,
@@ -93,7 +94,7 @@ func (p *projectProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -102,7 +103,7 @@ func (p *projectProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(ProjectColumnInstanceID),
@@ -117,7 +118,7 @@ func (p *projectProjection) reduceProjectAdded(event eventstore.Event) (*handler
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-l000S", "reduce.wrong.event.type %s", project.ProjectAddedType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectColumnID, e.Aggregate().ID),
@@ -142,7 +143,7 @@ func (p *projectProjection) reduceProjectChanged(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-s00Fs", "reduce.wrong.event.type %s", project.ProjectChangedType)
}
if e.Name == nil && e.HasProjectCheck == nil && e.ProjectRoleAssertion == nil && e.ProjectRoleCheck == nil && e.PrivateLabelingSetting == nil {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
columns := make([]handler.Column, 0, 7)
@@ -163,7 +164,7 @@ func (p *projectProjection) reduceProjectChanged(event eventstore.Event) (*handl
if e.PrivateLabelingSetting != nil {
columns = append(columns, handler.NewCol(ProjectColumnPrivateLabelingSetting, *e.PrivateLabelingSetting))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
columns,
[]handler.Condition{
@@ -178,7 +179,7 @@ func (p *projectProjection) reduceProjectDeactivated(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-LLp0f", "reduce.wrong.event.type %s", project.ProjectDeactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectColumnChangeDate, e.CreationDate()),
@@ -197,7 +198,7 @@ func (p *projectProjection) reduceProjectReactivated(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-9J98f", "reduce.wrong.event.type %s", project.ProjectReactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectColumnChangeDate, e.CreationDate()),
@@ -216,7 +217,7 @@ func (p *projectProjection) reduceProjectRemoved(event eventstore.Event) (*handl
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-5N9fs", "reduce.wrong.event.type %s", project.ProjectRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ProjectColumnID, e.Aggregate().ID),
@@ -231,7 +232,7 @@ func (p *projectProjection) reduceOwnerRemoved(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-sbgru", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ProjectColumnInstanceID, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/project_grant.go b/internal/query/projection/project_grant.go
index bb90298a17..7dbe17cd67 100644
--- a/internal/query/projection/project_grant.go
+++ b/internal/query/projection/project_grant.go
@@ -7,8 +7,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -31,45 +31,46 @@ const (
ProjectGrantColumnGrantedOrgRemoved = "granted_org_removed"
)
-type projectGrantProjection struct {
- crdb.StatementHandler
+type projectGrantProjection struct{}
+
+func newProjectGrantProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(projectGrantProjection))
}
-func newProjectGrantProjection(ctx context.Context, config crdb.StatementHandlerConfig) *projectGrantProjection {
- p := new(projectGrantProjection)
- config.ProjectionName = ProjectGrantProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(ProjectGrantColumnGrantID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ProjectGrantColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ProjectGrantColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(ProjectGrantColumnState, crdb.ColumnTypeEnum),
- crdb.NewColumn(ProjectGrantColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantColumnProjectID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantColumnGrantedOrgID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantColumnRoleKeys, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(ProjectGrantColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(ProjectGrantColumnGrantedOrgRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*projectGrantProjection) Name() string {
+ return ProjectGrantProjectionTable
+}
+
+func (*projectGrantProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(ProjectGrantColumnGrantID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ProjectGrantColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ProjectGrantColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(ProjectGrantColumnState, handler.ColumnTypeEnum),
+ handler.NewColumn(ProjectGrantColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantColumnProjectID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantColumnGrantedOrgID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantColumnRoleKeys, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(ProjectGrantColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(ProjectGrantColumnGrantedOrgRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(ProjectGrantColumnInstanceID, ProjectGrantColumnGrantID),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{ProjectGrantColumnResourceOwner})),
- crdb.WithIndex(crdb.NewIndex("granted_org", []string{ProjectGrantColumnGrantedOrgID})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{ProjectGrantColumnOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("granted_org_removed", []string{ProjectGrantColumnGrantedOrgRemoved})),
+ handler.NewPrimaryKey(ProjectGrantColumnInstanceID, ProjectGrantColumnGrantID),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{ProjectGrantColumnResourceOwner})),
+ handler.WithIndex(handler.NewIndex("granted_org", []string{ProjectGrantColumnGrantedOrgID})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{ProjectGrantColumnOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("granted_org_removed", []string{ProjectGrantColumnGrantedOrgRemoved})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *projectGrantProjection) reducers() []handler.AggregateReducer {
+func (p *projectGrantProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.GrantAddedType,
Reduce: p.reduceProjectGrantAdded,
@@ -102,7 +103,7 @@ func (p *projectGrantProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -111,7 +112,7 @@ func (p *projectGrantProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(ProjectGrantColumnInstanceID),
@@ -126,7 +127,7 @@ func (p *projectGrantProjection) reduceProjectGrantAdded(event eventstore.Event)
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-g92Fg", "reduce.wrong.event.type %s", project.GrantAddedType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectGrantColumnGrantID, e.GrantID),
@@ -138,7 +139,7 @@ func (p *projectGrantProjection) reduceProjectGrantAdded(event eventstore.Event)
handler.NewCol(ProjectGrantColumnState, domain.ProjectGrantStateActive),
handler.NewCol(ProjectGrantColumnSequence, e.Sequence()),
handler.NewCol(ProjectGrantColumnGrantedOrgID, e.GrantedOrgID),
- handler.NewCol(ProjectGrantColumnRoleKeys, database.StringArray(e.RoleKeys)),
+ handler.NewCol(ProjectGrantColumnRoleKeys, database.TextArray[string](e.RoleKeys)),
},
), nil
}
@@ -148,12 +149,12 @@ func (p *projectGrantProjection) reduceProjectGrantChanged(event eventstore.Even
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-g0fg4", "reduce.wrong.event.type %s", project.GrantChangedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectColumnChangeDate, e.CreationDate()),
handler.NewCol(ProjectGrantColumnSequence, e.Sequence()),
- handler.NewCol(ProjectGrantColumnRoleKeys, database.StringArray(e.RoleKeys)),
+ handler.NewCol(ProjectGrantColumnRoleKeys, database.TextArray[string](e.RoleKeys)),
},
[]handler.Condition{
handler.NewCond(ProjectGrantColumnGrantID, e.GrantID),
@@ -168,12 +169,12 @@ func (p *projectGrantProjection) reduceProjectGrantCascadeChanged(event eventsto
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ll9Ts", "reduce.wrong.event.type %s", project.GrantCascadeChangedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectGrantColumnChangeDate, e.CreationDate()),
handler.NewCol(ProjectGrantColumnSequence, e.Sequence()),
- handler.NewCol(ProjectGrantColumnRoleKeys, database.StringArray(e.RoleKeys)),
+ handler.NewCol(ProjectGrantColumnRoleKeys, database.TextArray[string](e.RoleKeys)),
},
[]handler.Condition{
handler.NewCond(ProjectGrantColumnGrantID, e.GrantID),
@@ -188,7 +189,7 @@ func (p *projectGrantProjection) reduceProjectGrantDeactivated(event eventstore.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-0fj2f", "reduce.wrong.event.type %s", project.GrantDeactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectGrantColumnChangeDate, e.CreationDate()),
@@ -208,7 +209,7 @@ func (p *projectGrantProjection) reduceProjectGrantReactivated(event eventstore.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-2M0ve", "reduce.wrong.event.type %s", project.GrantReactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectGrantColumnChangeDate, e.CreationDate()),
@@ -228,7 +229,7 @@ func (p *projectGrantProjection) reduceProjectGrantRemoved(event eventstore.Even
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-o0w4f", "reduce.wrong.event.type %s", project.GrantRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ProjectGrantColumnGrantID, e.GrantID),
@@ -243,7 +244,7 @@ func (p *projectGrantProjection) reduceProjectRemoved(event eventstore.Event) (*
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-gn9rw", "reduce.wrong.event.type %s", project.ProjectRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ProjectGrantColumnProjectID, e.Aggregate().ID),
@@ -258,15 +259,15 @@ func (p *projectGrantProjection) reduceOwnerRemoved(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-HDgW3", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(ProjectGrantColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(ProjectGrantColumnResourceOwner, e.Aggregate().ID),
},
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(ProjectGrantColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(ProjectGrantColumnGrantedOrgID, e.Aggregate().ID),
diff --git a/internal/query/projection/project_grant_member.go b/internal/query/projection/project_grant_member.go
index 596db4143f..934ed50767 100644
--- a/internal/query/projection/project_grant_member.go
+++ b/internal/query/projection/project_grant_member.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/member"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -23,38 +23,54 @@ const (
)
type projectGrantMemberProjection struct {
- crdb.StatementHandler
+ es handler.EventStore
}
-func newProjectGrantMemberProjection(ctx context.Context, config crdb.StatementHandlerConfig) *projectGrantMemberProjection {
- p := new(projectGrantMemberProjection)
- config.ProjectionName = ProjectGrantMemberProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable(
+func newProjectGrantMemberProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, &projectGrantMemberProjection{es: config.Eventstore})
+}
+
+func (*projectGrantMemberProjection) Name() string {
+ return ProjectGrantMemberProjectionTable
+}
+
+func (*projectGrantMemberProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable(
append(memberColumns,
- crdb.NewColumn(ProjectGrantMemberProjectIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantMemberGrantIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantMemberGrantedOrg, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectGrantMemberGrantedOrgRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+ handler.NewColumn(ProjectGrantMemberProjectIDCol, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantMemberGrantIDCol, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantMemberGrantedOrg, handler.ColumnTypeText),
+ handler.NewColumn(ProjectGrantMemberGrantedOrgRemoved, handler.ColumnTypeBool, handler.Default(false)),
+ ),
+ handler.NewPrimaryKey(MemberInstanceID, ProjectGrantMemberProjectIDCol, ProjectGrantMemberGrantIDCol, MemberUserIDCol),
+ handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("granted_org_removed", []string{ProjectGrantMemberGrantedOrgRemoved})),
+ handler.WithIndex(
+ handler.NewIndex("pgm_instance", []string{MemberInstanceID},
+ handler.WithInclude(
+ MemberCreationDate,
+ MemberChangeDate,
+ MemberUserOwnerRemoved,
+ MemberRolesCol,
+ MemberSequence,
+ MemberResourceOwner,
+ MemberOwnerRemoved,
+ ProjectGrantMemberGrantedOrgRemoved,
+ ),
+ ),
),
- crdb.NewPrimaryKey(MemberInstanceID, ProjectGrantMemberProjectIDCol, ProjectGrantMemberGrantIDCol, MemberUserIDCol),
- crdb.WithIndex(crdb.NewIndex("user_id", []string{MemberUserIDCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("granted_org_removed", []string{ProjectGrantMemberGrantedOrgRemoved})),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *projectGrantMemberProjection) reducers() []handler.AggregateReducer {
+func (p *projectGrantMemberProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.GrantMemberAddedType,
Reduce: p.reduceAdded,
@@ -83,7 +99,7 @@ func (p *projectGrantMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserRemovedType,
Reduce: p.reduceUserRemoved,
@@ -92,7 +108,7 @@ func (p *projectGrantMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOrgRemoved,
@@ -101,7 +117,7 @@ func (p *projectGrantMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(MemberInstanceID),
@@ -117,11 +133,11 @@ func (p *projectGrantMemberProjection) reduceAdded(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-0EBQf", "reduce.wrong.event.type %s", project.GrantMemberAddedType)
}
ctx := setMemberContext(e.Aggregate())
- userOwner, err := getResourceOwnerOfUser(ctx, p.Eventstore, e.Aggregate().InstanceID, e.UserID)
+ userOwner, err := getResourceOwnerOfUser(ctx, p.es, e.Aggregate().InstanceID, e.UserID)
if err != nil {
return nil, err
}
- grantedOrg, err := getGrantedOrgOfGrantedProject(ctx, p.Eventstore, e.Aggregate().InstanceID, e.Aggregate().ID, e.GrantID)
+ grantedOrg, err := getGrantedOrgOfGrantedProject(ctx, p.es, e.Aggregate().InstanceID, e.Aggregate().ID, e.GrantID)
if err != nil {
return nil, err
}
@@ -192,11 +208,11 @@ func (p *projectGrantMemberProjection) reduceOrgRemoved(event eventstore.Event)
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Zzp6o", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
multiReduceMemberOwnerRemoved(e),
multiReduceMemberUserOwnerRemoved(e),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(ProjectGrantColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(ProjectGrantMemberGrantedOrg, e.Aggregate().ID),
diff --git a/internal/query/projection/project_grant_member_test.go b/internal/query/projection/project_grant_member_test.go
index 12a032b9bc..0f9ae22605 100644
--- a/internal/query/projection/project_grant_member_test.go
+++ b/internal/query/projection/project_grant_member_test.go
@@ -10,8 +10,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -31,39 +30,45 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "project GrantMemberAddedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantMemberAddedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.GrantMemberAddedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role"],
"grantId": "grant-id"
}`),
- ), project.GrantMemberAddedEventMapper),
+ ), project.GrantMemberAddedEventMapper),
},
reduce: (&projectGrantMemberProjection{
- StatementHandler: getStatementHandlerWithFilters(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user-id", "org1").Aggregate,
- "username1",
- "firstname1",
- "lastname1",
- "nickname1",
- "displayname1",
- language.German,
- domain.GenderMale,
- "email1",
- true,
- ),
- project.NewGrantAddedEvent(context.Background(),
- &project.NewAggregate("project1", "org2").Aggregate,
- "grant", "org3", []string{},
- ),
- )(t)}).reduceAdded,
+ es: newMockEventStore().appendFilterResponse(
+ []eventstore.Event{
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user-id", "org1").Aggregate,
+ "username1",
+ "firstname1",
+ "lastname1",
+ "nickname1",
+ "displayname1",
+ language.German,
+ domain.GenderMale,
+ "email1",
+ true,
+ ),
+ },
+ ).appendFilterResponse(
+ []eventstore.Event{
+ project.NewGrantAddedEvent(context.Background(),
+ &project.NewAggregate("project1", "org2").Aggregate,
+ "grant", "org3", []string{},
+ ),
+ },
+ ),
+ }).reduceAdded,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -72,7 +77,7 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
"user-id",
"org1",
false,
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
@@ -92,27 +97,27 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "project GrantMemberChangedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantMemberChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.GrantMemberChangedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role", "changed"],
"grantId": "grant-id"
}`),
- ), project.GrantMemberChangedEventMapper),
+ ), project.GrantMemberChangedEventMapper),
},
reduce: (&projectGrantMemberProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_grant_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (project_id = $6) AND (grant_id = $7)",
expectedArgs: []interface{}{
- database.StringArray{"role", "changed"},
+ database.TextArray[string]{"role", "changed"},
anyArg{},
uint64(15),
"instance-id",
@@ -128,20 +133,20 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "project GrantMemberCascadeRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantMemberCascadeRemovedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.GrantMemberCascadeRemovedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id",
"grantId": "grant-id"
}`),
- ), project.GrantMemberCascadeRemovedEventMapper),
+ ), project.GrantMemberCascadeRemovedEventMapper),
},
reduce: (&projectGrantMemberProjection{}).reduceCascadeRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -160,20 +165,20 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "project GrantMemberRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantMemberRemovedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.GrantMemberRemovedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id",
"grantId": "grant-id"
}`),
- ), project.GrantMemberRemovedEventMapper),
+ ), project.GrantMemberRemovedEventMapper),
},
reduce: (&projectGrantMemberProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -192,17 +197,17 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "user UserRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&projectGrantMemberProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -219,17 +224,17 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "project ProjectRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- []byte(`{}`),
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ []byte(`{}`),
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&projectGrantMemberProjection{}).reduceProjectRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -245,17 +250,17 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
}, {
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MemberInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -271,17 +276,17 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "project GrantRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantRemovedType),
- project.AggregateType,
- []byte(`{"grantId": "grant-id"}`),
- ), project.GrantRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantRemovedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grant-id"}`),
+ ), project.GrantRemovedEventMapper),
},
reduce: (&projectGrantMemberProjection{}).reduceProjectGrantRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -299,17 +304,17 @@ func TestProjectGrantMemberProjection_reduces(t *testing.T) {
{
name: "org OrgRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- []byte(`{}`),
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ []byte(`{}`),
+ ), org.OrgRemovedEventMapper),
},
reduce: (&projectGrantMemberProjection{}).reduceOrgRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/project_grant_test.go b/internal/query/projection/project_grant_test.go
index c7ef0532d1..485e4aaa0d 100644
--- a/internal/query/projection/project_grant_test.go
+++ b/internal/query/projection/project_grant_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -27,17 +26,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- nil,
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ nil,
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&projectGrantProjection{}).reduceProjectRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -54,17 +53,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(ProjectGrantColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -80,17 +79,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantRemovedType),
- project.AggregateType,
- []byte(`{"grantId": "grant-id"}`),
- ), project.GrantRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantRemovedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grant-id"}`),
+ ), project.GrantRemovedEventMapper),
},
reduce: (&projectGrantProjection{}).reduceProjectGrantRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -108,17 +107,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantReactivatedType),
- project.AggregateType,
- []byte(`{"grantId": "grant-id"}`),
- ), project.GrantReactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantReactivatedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grant-id"}`),
+ ), project.GrantReactivatedEventMapper),
},
reduce: (&projectGrantProjection{}).reduceProjectGrantReactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -139,17 +138,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantDeactivatedType),
- project.AggregateType,
- []byte(`{"grantId": "grant-id"}`),
- ), project.GrantDeactivateEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantDeactivatedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grant-id"}`),
+ ), project.GrantDeactivateEventMapper),
},
reduce: (&projectGrantProjection{}).reduceProjectGrantDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -170,17 +169,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantChangedType),
- project.AggregateType,
- []byte(`{"grantId": "grant-id", "roleKeys": ["admin", "user"] }`),
- ), project.GrantChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantChangedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grant-id", "roleKeys": ["admin", "user"] }`),
+ ), project.GrantChangedEventMapper),
},
reduce: (&projectGrantProjection{}).reduceProjectGrantChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -188,7 +187,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
expectedArgs: []interface{}{
anyArg{},
uint64(15),
- database.StringArray{"admin", "user"},
+ database.TextArray[string]{"admin", "user"},
"grant-id",
"agg-id",
"instance-id",
@@ -201,17 +200,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantCascadeChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantCascadeChangedType),
- project.AggregateType,
- []byte(`{"grantId": "grant-id", "roleKeys": ["admin", "user"] }`),
- ), project.GrantCascadeChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantCascadeChangedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grant-id", "roleKeys": ["admin", "user"] }`),
+ ), project.GrantCascadeChangedEventMapper),
},
reduce: (&projectGrantProjection{}).reduceProjectGrantCascadeChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -219,7 +218,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
expectedArgs: []interface{}{
anyArg{},
uint64(15),
- database.StringArray{"admin", "user"},
+ database.TextArray[string]{"admin", "user"},
"grant-id",
"agg-id",
"instance-id",
@@ -232,17 +231,17 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantAddedType),
- project.AggregateType,
- []byte(`{"grantId": "grant-id", "grantedOrgId": "granted-org-id", "roleKeys": ["admin", "user"] }`),
- ), project.GrantAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantAddedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grant-id", "grantedOrgId": "granted-org-id", "roleKeys": ["admin", "user"] }`),
+ ), project.GrantAddedEventMapper),
},
reduce: (&projectGrantProjection{}).reduceProjectGrantAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -257,7 +256,7 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
domain.ProjectGrantStateActive,
uint64(15),
"granted-org-id",
- database.StringArray{"admin", "user"},
+ database.TextArray[string]{"admin", "user"},
},
},
},
@@ -268,16 +267,16 @@ func TestProjectGrantProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&projectGrantProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/project_member.go b/internal/query/projection/project_member.go
index 4039f82846..e6ad90f736 100644
--- a/internal/query/projection/project_member.go
+++ b/internal/query/projection/project_member.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/member"
"github.com/zitadel/zitadel/internal/repository/org"
@@ -20,34 +20,49 @@ const (
)
type projectMemberProjection struct {
- crdb.StatementHandler
+ es handler.EventStore
}
-func newProjectMemberProjection(ctx context.Context, config crdb.StatementHandlerConfig) *projectMemberProjection {
- p := new(projectMemberProjection)
- config.ProjectionName = ProjectMemberProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable(
+func newProjectMemberProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, &projectMemberProjection{es: config.Eventstore})
+}
+
+func (*projectMemberProjection) Name() string {
+ return ProjectMemberProjectionTable
+}
+
+func (*projectMemberProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable(
append(memberColumns,
- crdb.NewColumn(ProjectMemberProjectIDCol, crdb.ColumnTypeText),
+ handler.NewColumn(ProjectMemberProjectIDCol, handler.ColumnTypeText),
+ ),
+ handler.NewPrimaryKey(MemberInstanceID, ProjectMemberProjectIDCol, MemberUserIDCol),
+ handler.WithIndex(handler.NewIndex("user_id", []string{MemberUserIDCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
+ handler.WithIndex(
+ handler.NewIndex("pm_instance", []string{MemberInstanceID},
+ handler.WithInclude(
+ MemberCreationDate,
+ MemberChangeDate,
+ MemberUserOwnerRemoved,
+ MemberRolesCol,
+ MemberSequence,
+ MemberResourceOwner,
+ MemberOwnerRemoved,
+ ),
+ ),
),
- crdb.NewPrimaryKey(MemberInstanceID, ProjectMemberProjectIDCol, MemberUserIDCol),
- crdb.WithIndex(crdb.NewIndex("user_id", []string{MemberUserIDCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{MemberOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("user_owner_removed", []string{MemberUserOwnerRemoved})),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *projectMemberProjection) reducers() []handler.AggregateReducer {
+func (p *projectMemberProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.MemberAddedType,
Reduce: p.reduceAdded,
@@ -72,7 +87,7 @@ func (p *projectMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserRemovedType,
Reduce: p.reduceUserRemoved,
@@ -81,7 +96,7 @@ func (p *projectMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOrgRemoved,
@@ -90,7 +105,7 @@ func (p *projectMemberProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(MemberInstanceID),
@@ -106,7 +121,7 @@ func (p *projectMemberProjection) reduceAdded(event eventstore.Event) (*handler.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-bgx5Q", "reduce.wrong.event.type %s", project.MemberAddedType)
}
ctx := setMemberContext(e.Aggregate())
- userOwner, err := getResourceOwnerOfUser(ctx, p.Eventstore, e.Aggregate().InstanceID, e.UserID)
+ userOwner, err := getResourceOwnerOfUser(ctx, p.es, e.Aggregate().InstanceID, e.UserID)
if err != nil {
return nil, err
}
@@ -163,7 +178,7 @@ func (p *projectMemberProjection) reduceOrgRemoved(event eventstore.Event) (*han
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-NGUEL", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
multiReduceMemberOwnerRemoved(e),
multiReduceMemberUserOwnerRemoved(e),
diff --git a/internal/query/projection/project_member_test.go b/internal/query/projection/project_member_test.go
index 4c0f1ee0c9..27925c51eb 100644
--- a/internal/query/projection/project_member_test.go
+++ b/internal/query/projection/project_member_test.go
@@ -10,8 +10,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -31,34 +30,37 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "project MemberAddedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.MemberAddedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.MemberAddedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role"]
}`),
- ), project.MemberAddedEventMapper),
+ ), project.MemberAddedEventMapper),
},
reduce: (&projectMemberProjection{
- StatementHandler: getStatementHandlerWithFilters(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user-id", "org1").Aggregate,
- "username1",
- "firstname1",
- "lastname1",
- "nickname1",
- "displayname1",
- language.German,
- domain.GenderMale,
- "email1",
- true,
- ),
- )(t)}).reduceAdded,
+ es: newMockEventStore().appendFilterResponse(
+ []eventstore.Event{
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user-id", "org1").Aggregate,
+ "username1",
+ "firstname1",
+ "lastname1",
+ "nickname1",
+ "displayname1",
+ language.German,
+ domain.GenderMale,
+ "email1",
+ true,
+ ),
+ },
+ ),
+ }).reduceAdded,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -67,7 +69,7 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
"user-id",
"org1",
false,
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
anyArg{},
anyArg{},
uint64(15),
@@ -84,26 +86,26 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "project MemberChangedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.MemberChangedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.MemberChangedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id",
"roles": ["role", "changed"]
}`),
- ), project.MemberChangedEventMapper),
+ ), project.MemberChangedEventMapper),
},
reduce: (&projectMemberProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.project_members3 SET (roles, change_date, sequence) = ($1, $2, $3) WHERE (instance_id = $4) AND (user_id = $5) AND (project_id = $6)",
expectedArgs: []interface{}{
- database.StringArray{"role", "changed"},
+ database.TextArray[string]{"role", "changed"},
anyArg{},
uint64(15),
"instance-id",
@@ -118,19 +120,19 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "project MemberCascadeRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.MemberCascadeRemovedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.MemberCascadeRemovedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id"
}`),
- ), project.MemberCascadeRemovedEventMapper),
+ ), project.MemberCascadeRemovedEventMapper),
},
reduce: (&projectMemberProjection{}).reduceCascadeRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -148,19 +150,19 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "project MemberRemovedType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.MemberRemovedType),
- project.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ project.MemberRemovedType,
+ project.AggregateType,
+ []byte(`{
"userId": "user-id"
}`),
- ), project.MemberRemovedEventMapper),
+ ), project.MemberRemovedEventMapper),
},
reduce: (&projectMemberProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -178,17 +180,17 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "user UserRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&projectMemberProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -205,17 +207,17 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "project ProjectRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- []byte(`{}`),
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ []byte(`{}`),
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&projectMemberProjection{}).reduceProjectRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -232,17 +234,17 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MemberInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -258,17 +260,17 @@ func TestProjectMemberProjection_reduces(t *testing.T) {
{
name: "org OrgRemovedEventType",
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- []byte(`{}`),
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ []byte(`{}`),
+ ), org.OrgRemovedEventMapper),
},
reduce: (&projectMemberProjection{}).reduceOrgRemoved,
want: wantReduce{
- aggregateType: org.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: org.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/project_role.go b/internal/query/projection/project_role.go
index 4287414f28..b4fcd21f67 100644
--- a/internal/query/projection/project_role.go
+++ b/internal/query/projection/project_role.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -27,40 +27,41 @@ const (
ProjectRoleColumnOwnerRemoved = "owner_removed"
)
-type projectRoleProjection struct {
- crdb.StatementHandler
+type projectRoleProjection struct{}
+
+func newProjectRoleProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(projectRoleProjection))
}
-func newProjectRoleProjection(ctx context.Context, config crdb.StatementHandlerConfig) *projectRoleProjection {
- p := new(projectRoleProjection)
- config.ProjectionName = ProjectRoleProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(ProjectRoleColumnProjectID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectRoleColumnKey, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectRoleColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ProjectRoleColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(ProjectRoleColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(ProjectRoleColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectRoleColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectRoleColumnDisplayName, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectRoleColumnGroupName, crdb.ColumnTypeText),
- crdb.NewColumn(ProjectRoleColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*projectRoleProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(ProjectRoleColumnProjectID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectRoleColumnKey, handler.ColumnTypeText),
+ handler.NewColumn(ProjectRoleColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ProjectRoleColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(ProjectRoleColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(ProjectRoleColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(ProjectRoleColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(ProjectRoleColumnDisplayName, handler.ColumnTypeText),
+ handler.NewColumn(ProjectRoleColumnGroupName, handler.ColumnTypeText),
+ handler.NewColumn(ProjectRoleColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(ProjectRoleColumnInstanceID, ProjectRoleColumnProjectID, ProjectRoleColumnKey),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{ProjectRoleColumnOwnerRemoved})),
+ handler.NewPrimaryKey(ProjectRoleColumnInstanceID, ProjectRoleColumnProjectID, ProjectRoleColumnKey),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{ProjectRoleColumnOwnerRemoved})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *projectRoleProjection) reducers() []handler.AggregateReducer {
+func (*projectRoleProjection) Name() string {
+ return ProjectRoleProjectionTable
+}
+
+func (p *projectRoleProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.RoleAddedType,
Reduce: p.reduceProjectRoleAdded,
@@ -81,7 +82,7 @@ func (p *projectRoleProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -90,7 +91,7 @@ func (p *projectRoleProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(ProjectRoleColumnInstanceID),
@@ -105,7 +106,7 @@ func (p *projectRoleProjection) reduceProjectRoleAdded(event eventstore.Event) (
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-g92Fg", "reduce.wrong.event.type %s", project.RoleAddedType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(ProjectRoleColumnKey, e.Key),
@@ -127,7 +128,7 @@ func (p *projectRoleProjection) reduceProjectRoleChanged(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-sM0f", "reduce.wrong.event.type %s", project.GrantChangedType)
}
if e.DisplayName == nil && e.Group == nil {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
columns := make([]handler.Column, 0, 7)
columns = append(columns, handler.NewCol(ProjectRoleColumnChangeDate, e.CreationDate()),
@@ -138,7 +139,7 @@ func (p *projectRoleProjection) reduceProjectRoleChanged(event eventstore.Event)
if e.Group != nil {
columns = append(columns, handler.NewCol(ProjectRoleColumnGroupName, *e.Group))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
columns,
[]handler.Condition{
@@ -154,7 +155,7 @@ func (p *projectRoleProjection) reduceProjectRoleRemoved(event eventstore.Event)
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-L0fJf", "reduce.wrong.event.type %s", project.GrantRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ProjectRoleColumnKey, e.Key),
@@ -169,7 +170,7 @@ func (p *projectRoleProjection) reduceProjectRemoved(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-l0geG", "reduce.wrong.event.type %s", project.ProjectRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ProjectRoleColumnProjectID, e.Aggregate().ID),
@@ -184,7 +185,7 @@ func (p *projectRoleProjection) reduceOwnerRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-3XrHY", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(ProjectRoleColumnInstanceID, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/project_role_test.go b/internal/query/projection/project_role_test.go
index 0f54eb34e0..684ffa967f 100644
--- a/internal/query/projection/project_role_test.go
+++ b/internal/query/projection/project_role_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -25,17 +24,17 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
{
name: "reduceProjectRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- nil,
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ nil,
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&projectRoleProjection{}).reduceProjectRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -52,17 +51,17 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(ProjectRoleColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -78,17 +77,17 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
{
name: "reduceProjectRoleRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.RoleRemovedType),
- project.AggregateType,
- []byte(`{"key": "key"}`),
- ), project.RoleRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.RoleRemovedType,
+ project.AggregateType,
+ []byte(`{"key": "key"}`),
+ ), project.RoleRemovedEventMapper),
},
reduce: (&projectRoleProjection{}).reduceProjectRoleRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -106,17 +105,17 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
{
name: "reduceProjectRoleChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.RoleChangedType),
- project.AggregateType,
- []byte(`{"key": "key", "displayName": "New Key", "group": "New Group"}`),
- ), project.RoleChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.RoleChangedType,
+ project.AggregateType,
+ []byte(`{"key": "key", "displayName": "New Key", "group": "New Group"}`),
+ ), project.RoleChangedEventMapper),
},
reduce: (&projectRoleProjection{}).reduceProjectRoleChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -138,34 +137,34 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
{
name: "reduceProjectRoleChanged no changes",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.RoleChangedType),
- project.AggregateType,
- []byte(`{}`),
- ), project.RoleChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.RoleChangedType,
+ project.AggregateType,
+ []byte(`{}`),
+ ), project.RoleChangedEventMapper),
},
reduce: (&projectRoleProjection{}).reduceProjectRoleChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
- executer: &testExecuter{},
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
+ executer: &testExecuter{},
},
},
{
name: "reduceProjectRoleAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.RoleAddedType),
- project.AggregateType,
- []byte(`{"key": "key", "displayName": "Key", "group": "Group"}`),
- ), project.RoleAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.RoleAddedType,
+ project.AggregateType,
+ []byte(`{"key": "key", "displayName": "Key", "group": "Group"}`),
+ ), project.RoleAddedEventMapper),
},
reduce: (&projectRoleProjection{}).reduceProjectRoleAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -190,16 +189,16 @@ func TestProjectRoleProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&projectRoleProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/project_test.go b/internal/query/projection/project_test.go
index a9c05d88c0..4b5756b0e8 100644
--- a/internal/query/projection/project_test.go
+++ b/internal/query/projection/project_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -26,17 +25,17 @@ func TestProjectProjection_reduces(t *testing.T) {
{
name: "reduceProjectRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- nil,
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ nil,
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&projectProjection{}).reduceProjectRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -53,17 +52,17 @@ func TestProjectProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(ProjectColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -79,17 +78,17 @@ func TestProjectProjection_reduces(t *testing.T) {
{
name: "reduceProjectReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectReactivatedType),
- project.AggregateType,
- nil,
- ), project.ProjectReactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectReactivatedType,
+ project.AggregateType,
+ nil,
+ ), project.ProjectReactivatedEventMapper),
},
reduce: (&projectProjection{}).reduceProjectReactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -109,17 +108,17 @@ func TestProjectProjection_reduces(t *testing.T) {
{
name: "reduceProjectDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectDeactivatedType),
- project.AggregateType,
- nil,
- ), project.ProjectDeactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectDeactivatedType,
+ project.AggregateType,
+ nil,
+ ), project.ProjectDeactivatedEventMapper),
},
reduce: (&projectProjection{}).reduceProjectDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -139,17 +138,17 @@ func TestProjectProjection_reduces(t *testing.T) {
{
name: "reduceProjectChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectChangedType),
- project.AggregateType,
- []byte(`{"name": "new name", "projectRoleAssertion": true, "projectRoleCheck": true, "hasProjectCheck": true, "privateLabelingSetting": 1}`),
- ), project.ProjectChangeEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectChangedType,
+ project.AggregateType,
+ []byte(`{"name": "new name", "projectRoleAssertion": true, "projectRoleCheck": true, "hasProjectCheck": true, "privateLabelingSetting": 1}`),
+ ), project.ProjectChangeEventMapper),
},
reduce: (&projectProjection{}).reduceProjectChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -173,34 +172,34 @@ func TestProjectProjection_reduces(t *testing.T) {
{
name: "reduceProjectChanged no changes",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectChangedType),
- project.AggregateType,
- []byte(`{}`),
- ), project.ProjectChangeEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectChangedType,
+ project.AggregateType,
+ []byte(`{}`),
+ ), project.ProjectChangeEventMapper),
},
reduce: (&projectProjection{}).reduceProjectChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
- executer: &testExecuter{},
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
+ executer: &testExecuter{},
},
},
{
name: "reduceProjectAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectAddedType),
- project.AggregateType,
- []byte(`{"name": "name", "projectRoleAssertion": true, "projectRoleCheck": true, "hasProjectCheck": true, "privateLabelingSetting": 1}`),
- ), project.ProjectAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectAddedType,
+ project.AggregateType,
+ []byte(`{"name": "name", "projectRoleAssertion": true, "projectRoleCheck": true, "hasProjectCheck": true, "privateLabelingSetting": 1}`),
+ ), project.ProjectAddedEventMapper),
},
reduce: (&projectProjection{}).reduceProjectAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("project"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("project"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -228,16 +227,16 @@ func TestProjectProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&projectProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/projection.go b/internal/query/projection/projection.go
index 19a0c1cc0f..845395ec27 100644
--- a/internal/query/projection/projection.go
+++ b/internal/query/projection/projection.go
@@ -3,77 +3,76 @@ package projection
import (
"context"
+ internal_authz "github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
- "github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
)
const (
- CurrentSeqTable = "projections.current_sequences"
+ CurrentStateTable = "projections.current_states"
LocksTable = "projections.locks"
- FailedEventsTable = "projections.failed_events"
+ FailedEventsTable = "projections.failed_events2"
)
var (
- projectionConfig crdb.StatementHandlerConfig
- OrgProjection *orgProjection
- OrgMetadataProjection *orgMetadataProjection
- ActionProjection *actionProjection
- FlowProjection *flowProjection
- ProjectProjection *projectProjection
- PasswordComplexityProjection *passwordComplexityProjection
- PasswordAgeProjection *passwordAgeProjection
- LockoutPolicyProjection *lockoutPolicyProjection
- PrivacyPolicyProjection *privacyPolicyProjection
- DomainPolicyProjection *domainPolicyProjection
- LabelPolicyProjection *labelPolicyProjection
- ProjectGrantProjection *projectGrantProjection
- ProjectRoleProjection *projectRoleProjection
- OrgDomainProjection *orgDomainProjection
- LoginPolicyProjection *loginPolicyProjection
- IDPProjection *idpProjection
- AppProjection *appProjection
- IDPUserLinkProjection *idpUserLinkProjection
- IDPLoginPolicyLinkProjection *idpLoginPolicyLinkProjection
- IDPTemplateProjection *idpTemplateProjection
- MailTemplateProjection *mailTemplateProjection
- MessageTextProjection *messageTextProjection
- CustomTextProjection *customTextProjection
- UserProjection *userProjection
- LoginNameProjection *loginNameProjection
- OrgMemberProjection *orgMemberProjection
- InstanceDomainProjection *instanceDomainProjection
- InstanceMemberProjection *instanceMemberProjection
- ProjectMemberProjection *projectMemberProjection
- ProjectGrantMemberProjection *projectGrantMemberProjection
- AuthNKeyProjection *authNKeyProjection
- PersonalAccessTokenProjection *personalAccessTokenProjection
- UserGrantProjection *userGrantProjection
- UserMetadataProjection *userMetadataProjection
- UserAuthMethodProjection *userAuthMethodProjection
- InstanceProjection *instanceProjection
- SecretGeneratorProjection *secretGeneratorProjection
- SMTPConfigProjection *smtpConfigProjection
- SMSConfigProjection *smsConfigProjection
- OIDCSettingsProjection *oidcSettingsProjection
- DebugNotificationProviderProjection *debugNotificationProviderProjection
- KeyProjection *keyProjection
- SecurityPolicyProjection *securityPolicyProjection
- NotificationPolicyProjection *notificationPolicyProjection
+ projectionConfig handler.Config
+ OrgProjection *handler.Handler
+ OrgMetadataProjection *handler.Handler
+ ActionProjection *handler.Handler
+ FlowProjection *handler.Handler
+ ProjectProjection *handler.Handler
+ PasswordComplexityProjection *handler.Handler
+ PasswordAgeProjection *handler.Handler
+ LockoutPolicyProjection *handler.Handler
+ PrivacyPolicyProjection *handler.Handler
+ DomainPolicyProjection *handler.Handler
+ LabelPolicyProjection *handler.Handler
+ ProjectGrantProjection *handler.Handler
+ ProjectRoleProjection *handler.Handler
+ OrgDomainProjection *handler.Handler
+ LoginPolicyProjection *handler.Handler
+ IDPProjection *handler.Handler
+ AppProjection *handler.Handler
+ IDPUserLinkProjection *handler.Handler
+ IDPLoginPolicyLinkProjection *handler.Handler
+ IDPTemplateProjection *handler.Handler
+ MailTemplateProjection *handler.Handler
+ MessageTextProjection *handler.Handler
+ CustomTextProjection *handler.Handler
+ UserProjection *handler.Handler
+ LoginNameProjection *handler.Handler
+ OrgMemberProjection *handler.Handler
+ InstanceDomainProjection *handler.Handler
+ InstanceMemberProjection *handler.Handler
+ ProjectMemberProjection *handler.Handler
+ ProjectGrantMemberProjection *handler.Handler
+ AuthNKeyProjection *handler.Handler
+ PersonalAccessTokenProjection *handler.Handler
+ UserGrantProjection *handler.Handler
+ UserMetadataProjection *handler.Handler
+ UserAuthMethodProjection *handler.Handler
+ InstanceProjection *handler.Handler
+ SecretGeneratorProjection *handler.Handler
+ SMTPConfigProjection *handler.Handler
+ SMSConfigProjection *handler.Handler
+ OIDCSettingsProjection *handler.Handler
+ DebugNotificationProviderProjection *handler.Handler
+ KeyProjection *handler.Handler
+ SecurityPolicyProjection *handler.Handler
+ NotificationPolicyProjection *handler.Handler
NotificationsProjection interface{}
NotificationsQuotaProjection interface{}
TelemetryPusherProjection interface{}
- DeviceAuthProjection *deviceAuthProjection
- SessionProjection *sessionProjection
- AuthRequestProjection *authRequestProjection
- MilestoneProjection *milestoneProjection
+ DeviceAuthProjection *handler.Handler
+ SessionProjection *handler.Handler
+ AuthRequestProjection *handler.Handler
+ MilestoneProjection *handler.Handler
QuotaProjection *quotaProjection
)
type projection interface {
- Start()
+ Start(ctx context.Context)
Init(ctx context.Context) error
}
@@ -81,24 +80,16 @@ var (
projections []projection
)
-func Create(ctx context.Context, sqlClient *database.DB, es *eventstore.Eventstore, config Config, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, certEncryptionAlgorithm crypto.EncryptionAlgorithm) error {
- projectionConfig = crdb.StatementHandlerConfig{
- ProjectionHandlerConfig: handler.ProjectionHandlerConfig{
- HandlerConfig: handler.HandlerConfig{
- Eventstore: es,
- },
- RequeueEvery: config.RequeueEvery,
- RetryFailedAfter: config.RetryFailedAfter,
- Retries: config.MaxFailureCount,
- ConcurrentInstances: config.ConcurrentInstances,
- HandleActiveInstances: config.HandleActiveInstances,
- },
- Client: sqlClient,
- SequenceTable: CurrentSeqTable,
- LockTable: LocksTable,
- FailedEventsTable: FailedEventsTable,
- MaxFailureCount: config.MaxFailureCount,
- BulkLimit: config.BulkLimit,
+func Create(ctx context.Context, sqlClient *database.DB, es handler.EventStore, config Config, keyEncryptionAlgorithm crypto.EncryptionAlgorithm, certEncryptionAlgorithm crypto.EncryptionAlgorithm, systemUsers map[string]*internal_authz.SystemAPIUser) error {
+ projectionConfig = handler.Config{
+ Client: sqlClient,
+ Eventstore: es,
+ BulkLimit: uint16(config.BulkLimit),
+ RequeueEvery: config.RequeueEvery,
+ HandleActiveInstances: config.HandleActiveInstances,
+ MaxFailureCount: config.MaxFailureCount,
+ RetryFailedAfter: config.RetryFailedAfter,
+ TransactionDuration: config.TransactionDuration,
}
OrgProjection = newOrgProjection(ctx, applyCustomConfig(projectionConfig, config.Customizations["orgs"]))
@@ -148,7 +139,7 @@ func Create(ctx context.Context, sqlClient *database.DB, es *eventstore.Eventsto
DeviceAuthProjection = newDeviceAuthProjection(ctx, applyCustomConfig(projectionConfig, config.Customizations["device_auth"]))
SessionProjection = newSessionProjection(ctx, applyCustomConfig(projectionConfig, config.Customizations["sessions"]))
AuthRequestProjection = newAuthRequestProjection(ctx, applyCustomConfig(projectionConfig, config.Customizations["auth_requests"]))
- MilestoneProjection = newMilestoneProjection(ctx, applyCustomConfig(projectionConfig, config.Customizations["milestones"]))
+ MilestoneProjection = newMilestoneProjection(ctx, applyCustomConfig(projectionConfig, config.Customizations["milestones"]), systemUsers)
QuotaProjection = newQuotaProjection(ctx, applyCustomConfig(projectionConfig, config.Customizations["quotas"]))
newProjectionsList()
return nil
@@ -163,17 +154,17 @@ func Init(ctx context.Context) error {
return nil
}
-func Start() {
+func Start(ctx context.Context) {
for _, projection := range projections {
- projection.Start()
+ projection.Start(ctx)
}
}
-func ApplyCustomConfig(customConfig CustomConfig) crdb.StatementHandlerConfig {
+func ApplyCustomConfig(customConfig CustomConfig) handler.Config {
return applyCustomConfig(projectionConfig, customConfig)
}
-func applyCustomConfig(config crdb.StatementHandlerConfig, customConfig CustomConfig) crdb.StatementHandlerConfig {
+func applyCustomConfig(config handler.Config, customConfig CustomConfig) handler.Config {
if customConfig.BulkLimit != nil {
config.BulkLimit = *customConfig.BulkLimit
}
@@ -189,6 +180,9 @@ func applyCustomConfig(config crdb.StatementHandlerConfig, customConfig CustomCo
if customConfig.HandleActiveInstances != nil {
config.HandleActiveInstances = *customConfig.HandleActiveInstances
}
+ if customConfig.TransactionDuration != nil {
+ config.TransactionDuration = *customConfig.TransactionDuration
+ }
return config
}
@@ -249,6 +243,6 @@ func newProjectionsList() {
SessionProjection,
AuthRequestProjection,
MilestoneProjection,
- QuotaProjection,
+ QuotaProjection.handler,
}
}
diff --git a/internal/query/projection/quota.go b/internal/query/projection/quota.go
index e6de8663ac..d92ad0b49d 100644
--- a/internal/query/projection/quota.go
+++ b/internal/query/projection/quota.go
@@ -7,8 +7,8 @@ import (
"github.com/zitadel/zitadel/internal/database"
zitadel_errors "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/quota"
)
@@ -51,62 +51,68 @@ const (
)
type quotaProjection struct {
- crdb.StatementHandler
- client *database.DB
+ handler *handler.Handler
+ client *database.DB
}
-func newQuotaProjection(ctx context.Context, config crdb.StatementHandlerConfig) *quotaProjection {
- p := new(quotaProjection)
- config.ProjectionName = QuotasProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable(
- []*crdb.Column{
- crdb.NewColumn(QuotaColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(QuotaColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(QuotaColumnUnit, crdb.ColumnTypeEnum),
- crdb.NewColumn(QuotaColumnAmount, crdb.ColumnTypeInt64, crdb.Nullable()),
- crdb.NewColumn(QuotaColumnFrom, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(QuotaColumnInterval, crdb.ColumnTypeInterval, crdb.Nullable()),
- crdb.NewColumn(QuotaColumnLimit, crdb.ColumnTypeBool, crdb.Nullable()),
- },
- crdb.NewPrimaryKey(QuotaColumnInstanceID, QuotaColumnUnit),
- ),
- crdb.NewSuffixedTable(
- []*crdb.Column{
- crdb.NewColumn(QuotaPeriodColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(QuotaPeriodColumnUnit, crdb.ColumnTypeEnum),
- crdb.NewColumn(QuotaPeriodColumnStart, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(QuotaPeriodColumnUsage, crdb.ColumnTypeInt64),
- },
- crdb.NewPrimaryKey(QuotaPeriodColumnInstanceID, QuotaPeriodColumnUnit, QuotaPeriodColumnStart),
- quotaPeriodsTableSuffix,
- ),
- crdb.NewSuffixedTable(
- []*crdb.Column{
- crdb.NewColumn(QuotaNotificationColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(QuotaNotificationColumnUnit, crdb.ColumnTypeEnum),
- crdb.NewColumn(QuotaNotificationColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(QuotaNotificationColumnCallURL, crdb.ColumnTypeText),
- crdb.NewColumn(QuotaNotificationColumnPercent, crdb.ColumnTypeInt64),
- crdb.NewColumn(QuotaNotificationColumnRepeat, crdb.ColumnTypeBool),
- crdb.NewColumn(QuotaNotificationColumnLatestDuePeriodStart, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(QuotaNotificationColumnNextDueThreshold, crdb.ColumnTypeInt64, crdb.Nullable()),
- },
- crdb.NewPrimaryKey(QuotaNotificationColumnInstanceID, QuotaNotificationColumnUnit, QuotaNotificationColumnID),
- quotaNotificationsTableSuffix,
- ),
- )
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- p.client = config.Client
+func newQuotaProjection(ctx context.Context, config handler.Config) *quotaProjection {
+ p := "aProjection{
+ client: config.Client,
+ }
+ p.handler = handler.NewHandler(ctx, &config, p)
return p
}
-func (q *quotaProjection) reducers() []handler.AggregateReducer {
+func (*quotaProjection) Name() string {
+ return QuotasProjectionTable
+}
+
+func (*quotaProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable(
+ []*handler.InitColumn{
+ handler.NewColumn(QuotaColumnID, handler.ColumnTypeText),
+ handler.NewColumn(QuotaColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(QuotaColumnUnit, handler.ColumnTypeEnum),
+ handler.NewColumn(QuotaColumnAmount, handler.ColumnTypeInt64, handler.Nullable()),
+ handler.NewColumn(QuotaColumnFrom, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(QuotaColumnInterval, handler.ColumnTypeInterval, handler.Nullable()),
+ handler.NewColumn(QuotaColumnLimit, handler.ColumnTypeBool, handler.Nullable()),
+ },
+ handler.NewPrimaryKey(QuotaColumnInstanceID, QuotaColumnUnit),
+ ),
+ handler.NewSuffixedTable(
+ []*handler.InitColumn{
+ handler.NewColumn(QuotaPeriodColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(QuotaPeriodColumnUnit, handler.ColumnTypeEnum),
+ handler.NewColumn(QuotaPeriodColumnStart, handler.ColumnTypeTimestamp),
+ handler.NewColumn(QuotaPeriodColumnUsage, handler.ColumnTypeInt64),
+ },
+ handler.NewPrimaryKey(QuotaPeriodColumnInstanceID, QuotaPeriodColumnUnit, QuotaPeriodColumnStart),
+ quotaPeriodsTableSuffix,
+ ),
+ handler.NewSuffixedTable(
+ []*handler.InitColumn{
+ handler.NewColumn(QuotaNotificationColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(QuotaNotificationColumnUnit, handler.ColumnTypeEnum),
+ handler.NewColumn(QuotaNotificationColumnID, handler.ColumnTypeText),
+ handler.NewColumn(QuotaNotificationColumnCallURL, handler.ColumnTypeText),
+ handler.NewColumn(QuotaNotificationColumnPercent, handler.ColumnTypeInt64),
+ handler.NewColumn(QuotaNotificationColumnRepeat, handler.ColumnTypeBool),
+ handler.NewColumn(QuotaNotificationColumnLatestDuePeriodStart, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(QuotaNotificationColumnNextDueThreshold, handler.ColumnTypeInt64, handler.Nullable()),
+ },
+ handler.NewPrimaryKey(QuotaNotificationColumnInstanceID, QuotaNotificationColumnUnit, QuotaNotificationColumnID),
+ quotaNotificationsTableSuffix,
+ ),
+ )
+}
+
+func (q *quotaProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: q.reduceInstanceRemoved,
@@ -115,7 +121,7 @@ func (q *quotaProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: quota.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: quota.AddedEventType,
Reduce: q.reduceQuotaSet,
@@ -142,7 +148,7 @@ func (q *quotaProjection) reducers() []handler.AggregateReducer {
}
func (q *quotaProjection) reduceQuotaNotified(event eventstore.Event) (*handler.Statement, error) {
- return crdb.NewNoOpStatement(event), nil
+ return handler.NewNoOpStatement(event), nil
}
func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.Statement, error) {
@@ -150,7 +156,7 @@ func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.State
if err != nil {
return nil, err
}
- var statements []func(e eventstore.Event) crdb.Exec
+ var statements []func(e eventstore.Event) handler.Exec
// 1. Insert or update quota if the event has not only notification changes
quotaConflictColumns := []handler.Column{
@@ -174,24 +180,24 @@ func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.State
// TODO: Add the quota ID to the primary key in a migration?
quotaUpdateCols = append(quotaUpdateCols, handler.NewCol(QuotaColumnID, e.Aggregate().ID))
quotaUpdateCols = append(quotaUpdateCols, quotaConflictColumns...)
- statements = append(statements, crdb.AddUpsertStatement(quotaConflictColumns, quotaUpdateCols))
+ statements = append(statements, handler.AddUpsertStatement(quotaConflictColumns, quotaUpdateCols))
}
// 2. Delete existing notifications
if e.Notifications == nil {
- return crdb.NewMultiStatement(e, statements...), nil
+ return handler.NewMultiStatement(e, statements...), nil
}
- statements = append(statements, crdb.AddDeleteStatement(
+ statements = append(statements, handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(QuotaNotificationColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(QuotaNotificationColumnUnit, e.Unit),
},
- crdb.WithTableSuffix(quotaNotificationsTableSuffix),
+ handler.WithTableSuffix(quotaNotificationsTableSuffix),
))
notifications := *e.Notifications
for i := range notifications {
notification := notifications[i]
- statements = append(statements, crdb.AddCreateStatement(
+ statements = append(statements, handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(QuotaNotificationColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCol(QuotaNotificationColumnUnit, e.Unit),
@@ -200,10 +206,10 @@ func (q *quotaProjection) reduceQuotaSet(event eventstore.Event) (*handler.State
handler.NewCol(QuotaNotificationColumnPercent, notification.Percent),
handler.NewCol(QuotaNotificationColumnRepeat, notification.Repeat),
},
- crdb.WithTableSuffix(quotaNotificationsTableSuffix),
+ handler.WithTableSuffix(quotaNotificationsTableSuffix),
))
}
- return crdb.NewMultiStatement(e, statements...), nil
+ return handler.NewMultiStatement(e, statements...), nil
}
func (q *quotaProjection) reduceQuotaNotificationDue(event eventstore.Event) (*handler.Statement, error) {
@@ -211,7 +217,7 @@ func (q *quotaProjection) reduceQuotaNotificationDue(event eventstore.Event) (*h
if err != nil {
return nil, err
}
- return crdb.NewUpdateStatement(e,
+ return handler.NewUpdateStatement(e,
[]handler.Column{
handler.NewCol(QuotaNotificationColumnLatestDuePeriodStart, e.PeriodStart),
handler.NewCol(QuotaNotificationColumnNextDueThreshold, e.Threshold+100), // next due_threshold is always the reached + 100 => percent (e.g. 90) in the next bucket (e.g. 190)
@@ -221,9 +227,7 @@ func (q *quotaProjection) reduceQuotaNotificationDue(event eventstore.Event) (*h
handler.NewCond(QuotaNotificationColumnUnit, e.Unit),
handler.NewCond(QuotaNotificationColumnID, e.ID),
},
- crdb.WithTableSuffix(quotaNotificationsTableSuffix),
- // The notification could have been removed in the meantime
- crdb.WithIgnoreNotFound(),
+ handler.WithTableSuffix(quotaNotificationsTableSuffix),
), nil
}
@@ -232,23 +236,23 @@ func (q *quotaProjection) reduceQuotaRemoved(event eventstore.Event) (*handler.S
if err != nil {
return nil, err
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(QuotaPeriodColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(QuotaPeriodColumnUnit, e.Unit),
},
- crdb.WithTableSuffix(quotaPeriodsTableSuffix),
+ handler.WithTableSuffix(quotaPeriodsTableSuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(QuotaNotificationColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(QuotaNotificationColumnUnit, e.Unit),
},
- crdb.WithTableSuffix(quotaNotificationsTableSuffix),
+ handler.WithTableSuffix(quotaNotificationsTableSuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(QuotaColumnInstanceID, e.Aggregate().InstanceID),
handler.NewCond(QuotaColumnUnit, e.Unit),
@@ -263,21 +267,21 @@ func (q *quotaProjection) reduceInstanceRemoved(event eventstore.Event) (*handle
if err != nil {
return nil, err
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(QuotaPeriodColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(quotaPeriodsTableSuffix),
+ handler.WithTableSuffix(quotaPeriodsTableSuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(QuotaNotificationColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(quotaNotificationsTableSuffix),
+ handler.WithTableSuffix(quotaNotificationsTableSuffix),
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(QuotaColumnInstanceID, e.Aggregate().InstanceID),
},
diff --git a/internal/query/projection/quota_test.go b/internal/query/projection/quota_test.go
index 8bccec08a9..fb44901e05 100644
--- a/internal/query/projection/quota_test.go
+++ b/internal/query/projection/quota_test.go
@@ -12,8 +12,7 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/quota"
)
@@ -32,7 +31,7 @@ func TestQuotasProjection_reduces(t *testing.T) {
name: "reduceQuotaSet with added type",
args: args{
event: getEvent(testEvent(
- repository.EventType(quota.AddedEventType),
+ quota.AddedEventType,
quota.AggregateType,
[]byte(`{
"unit": 1,
@@ -45,9 +44,8 @@ func TestQuotasProjection_reduces(t *testing.T) {
},
reduce: ("aProjection{}).reduceQuotaSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("quota"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("quota"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -70,7 +68,7 @@ func TestQuotasProjection_reduces(t *testing.T) {
name: "reduceQuotaAdded with added type and notification",
args: args{
event: getEvent(testEvent(
- repository.EventType(quota.AddedEventType),
+ quota.AddedEventType,
quota.AggregateType,
[]byte(`{
"unit": 1,
@@ -91,9 +89,8 @@ func TestQuotasProjection_reduces(t *testing.T) {
},
reduce: ("aProjection{}).reduceQuotaSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("quota"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("quota"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -134,7 +131,7 @@ func TestQuotasProjection_reduces(t *testing.T) {
name: "reduceQuotaSet with set type",
args: args{
event: getEvent(testEvent(
- repository.EventType(quota.SetEventType),
+ quota.SetEventType,
quota.AggregateType,
[]byte(`{
"unit": 1,
@@ -147,9 +144,8 @@ func TestQuotasProjection_reduces(t *testing.T) {
},
reduce: ("aProjection{}).reduceQuotaSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("quota"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("quota"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -172,7 +168,7 @@ func TestQuotasProjection_reduces(t *testing.T) {
name: "reduceQuotaAdded with set type and notification",
args: args{
event: getEvent(testEvent(
- repository.EventType(quota.SetEventType),
+ quota.SetEventType,
quota.AggregateType,
[]byte(`{
"unit": 1,
@@ -193,9 +189,8 @@ func TestQuotasProjection_reduces(t *testing.T) {
},
reduce: ("aProjection{}).reduceQuotaSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("quota"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("quota"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -236,7 +231,7 @@ func TestQuotasProjection_reduces(t *testing.T) {
name: "reduceQuotaNotificationDue",
args: args{
event: getEvent(testEvent(
- repository.EventType(quota.NotificationDueEventType),
+ quota.NotificationDueEventType,
quota.AggregateType,
[]byte(`{
"id": "id",
@@ -250,9 +245,8 @@ func TestQuotasProjection_reduces(t *testing.T) {
},
reduce: ("aProjection{}).reduceQuotaNotificationDue,
want: wantReduce{
- aggregateType: eventstore.AggregateType("quota"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("quota"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -273,7 +267,7 @@ func TestQuotasProjection_reduces(t *testing.T) {
name: "reduceQuotaRemoved",
args: args{
event: getEvent(testEvent(
- repository.EventType(quota.RemovedEventType),
+ quota.RemovedEventType,
quota.AggregateType,
[]byte(`{
"unit": 1
@@ -282,9 +276,8 @@ func TestQuotasProjection_reduces(t *testing.T) {
},
reduce: ("aProjection{}).reduceQuotaRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("quota"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("quota"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -315,7 +308,7 @@ func TestQuotasProjection_reduces(t *testing.T) {
name: "reduceInstanceRemoved",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
+ instance.InstanceRemovedEventType,
instance.AggregateType,
[]byte(`{
"name": "name"
@@ -324,9 +317,8 @@ func TestQuotasProjection_reduces(t *testing.T) {
},
reduce: ("aProjection{}).reduceInstanceRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/secret_generator.go b/internal/query/projection/secret_generator.go
index 828d0231f6..d81937d677 100644
--- a/internal/query/projection/secret_generator.go
+++ b/internal/query/projection/secret_generator.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -28,42 +28,43 @@ const (
SecretGeneratorColumnIncludeSymbols = "include_symbols"
)
-type secretGeneratorProjection struct {
- crdb.StatementHandler
+type secretGeneratorProjection struct{}
+
+func newSecretGeneratorProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(secretGeneratorProjection))
}
-func newSecretGeneratorProjection(ctx context.Context, config crdb.StatementHandlerConfig) *secretGeneratorProjection {
- p := new(secretGeneratorProjection)
- config.ProjectionName = SecretGeneratorProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(SecretGeneratorColumnGeneratorType, crdb.ColumnTypeEnum),
- crdb.NewColumn(SecretGeneratorColumnAggregateID, crdb.ColumnTypeText),
- crdb.NewColumn(SecretGeneratorColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SecretGeneratorColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SecretGeneratorColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(SecretGeneratorColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(SecretGeneratorColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(SecretGeneratorColumnLength, crdb.ColumnTypeInt64),
- crdb.NewColumn(SecretGeneratorColumnExpiry, crdb.ColumnTypeInt64),
- crdb.NewColumn(SecretGeneratorColumnIncludeLowerLetters, crdb.ColumnTypeBool),
- crdb.NewColumn(SecretGeneratorColumnIncludeUpperLetters, crdb.ColumnTypeBool),
- crdb.NewColumn(SecretGeneratorColumnIncludeDigits, crdb.ColumnTypeBool),
- crdb.NewColumn(SecretGeneratorColumnIncludeSymbols, crdb.ColumnTypeBool),
+func (*secretGeneratorProjection) Name() string {
+ return SecretGeneratorProjectionTable
+}
+
+func (*secretGeneratorProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(SecretGeneratorColumnGeneratorType, handler.ColumnTypeEnum),
+ handler.NewColumn(SecretGeneratorColumnAggregateID, handler.ColumnTypeText),
+ handler.NewColumn(SecretGeneratorColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SecretGeneratorColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SecretGeneratorColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(SecretGeneratorColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(SecretGeneratorColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(SecretGeneratorColumnLength, handler.ColumnTypeInt64),
+ handler.NewColumn(SecretGeneratorColumnExpiry, handler.ColumnTypeInt64),
+ handler.NewColumn(SecretGeneratorColumnIncludeLowerLetters, handler.ColumnTypeBool),
+ handler.NewColumn(SecretGeneratorColumnIncludeUpperLetters, handler.ColumnTypeBool),
+ handler.NewColumn(SecretGeneratorColumnIncludeDigits, handler.ColumnTypeBool),
+ handler.NewColumn(SecretGeneratorColumnIncludeSymbols, handler.ColumnTypeBool),
},
- crdb.NewPrimaryKey(SecretGeneratorColumnInstanceID, SecretGeneratorColumnGeneratorType, SecretGeneratorColumnAggregateID),
+ handler.NewPrimaryKey(SecretGeneratorColumnInstanceID, SecretGeneratorColumnGeneratorType, SecretGeneratorColumnAggregateID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *secretGeneratorProjection) reducers() []handler.AggregateReducer {
+func (p *secretGeneratorProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.SecretGeneratorAddedEventType,
Reduce: p.reduceSecretGeneratorAdded,
@@ -90,7 +91,7 @@ func (p *secretGeneratorProjection) reduceSecretGeneratorAdded(event eventstore.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-sk99F", "reduce.wrong.event.type %s", instance.SecretGeneratorAddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(SecretGeneratorColumnAggregateID, e.Aggregate().ID),
@@ -137,7 +138,7 @@ func (p *secretGeneratorProjection) reduceSecretGeneratorChanged(event eventstor
if e.IncludeSymbols != nil {
columns = append(columns, handler.NewCol(SecretGeneratorColumnIncludeSymbols, *e.IncludeSymbols))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
columns,
[]handler.Condition{
@@ -153,7 +154,7 @@ func (p *secretGeneratorProjection) reduceSecretGeneratorRemoved(event eventstor
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-fmiIf", "reduce.wrong.event.type %s", instance.SecretGeneratorRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(SecretGeneratorColumnAggregateID, e.Aggregate().ID),
diff --git a/internal/query/projection/secret_generator_test.go b/internal/query/projection/secret_generator_test.go
index e0a072d556..4f808d0511 100644
--- a/internal/query/projection/secret_generator_test.go
+++ b/internal/query/projection/secret_generator_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -25,17 +24,17 @@ func TestSecretGeneratorProjection_reduces(t *testing.T) {
{
name: "reduceSecretGeneratorRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SecretGeneratorRemovedEventType),
- instance.AggregateType,
- []byte(`{"generatorType": 1}`),
- ), instance.SecretGeneratorRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.SecretGeneratorRemovedEventType,
+ instance.AggregateType,
+ []byte(`{"generatorType": 1}`),
+ ), instance.SecretGeneratorRemovedEventMapper),
},
reduce: (&secretGeneratorProjection{}).reduceSecretGeneratorRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -53,17 +52,17 @@ func TestSecretGeneratorProjection_reduces(t *testing.T) {
{
name: "reduceSecretGeneratorChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SecretGeneratorChangedEventType),
- instance.AggregateType,
- []byte(`{"generatorType": 1, "length": 4, "expiry": 10000000, "includeLowerLetters": true, "includeUpperLetters": true, "includeDigits": true, "includeSymbols": true}`),
- ), instance.SecretGeneratorChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.SecretGeneratorChangedEventType,
+ instance.AggregateType,
+ []byte(`{"generatorType": 1, "length": 4, "expiry": 10000000, "includeLowerLetters": true, "includeUpperLetters": true, "includeDigits": true, "includeSymbols": true}`),
+ ), instance.SecretGeneratorChangedEventMapper),
},
reduce: (&secretGeneratorProjection{}).reduceSecretGeneratorChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -89,17 +88,17 @@ func TestSecretGeneratorProjection_reduces(t *testing.T) {
{
name: "reduceSecretGeneratorAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SecretGeneratorAddedEventType),
- instance.AggregateType,
- []byte(`{"generatorType": 1, "length": 4, "expiry": 10000000, "includeLowerLetters": true, "includeUpperLetters": true, "includeDigits": true, "includeSymbols": true}`),
- ), instance.SecretGeneratorAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.SecretGeneratorAddedEventType,
+ instance.AggregateType,
+ []byte(`{"generatorType": 1, "length": 4, "expiry": 10000000, "includeLowerLetters": true, "includeUpperLetters": true, "includeDigits": true, "includeSymbols": true}`),
+ ), instance.SecretGeneratorAddedEventMapper),
},
reduce: (&secretGeneratorProjection{}).reduceSecretGeneratorAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -127,17 +126,17 @@ func TestSecretGeneratorProjection_reduces(t *testing.T) {
{
name: "reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(MemberInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/security_policy.go b/internal/query/projection/security_policy.go
index 57968aa4b9..4c30cfc868 100644
--- a/internal/query/projection/security_policy.go
+++ b/internal/query/projection/security_policy.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -20,35 +20,36 @@ const (
SecurityPolicyColumnAllowedOrigins = "origins"
)
-type securityPolicyProjection struct {
- crdb.StatementHandler
+type securityPolicyProjection struct{}
+
+func newSecurityPolicyProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(securityPolicyProjection))
}
-func newSecurityPolicyProjection(ctx context.Context, config crdb.StatementHandlerConfig) *securityPolicyProjection {
- p := new(securityPolicyProjection)
- config.ProjectionName = SecurityPolicyProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(SecurityPolicyColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SecurityPolicyColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SecurityPolicyColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(SecurityPolicyColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(SecurityPolicyColumnEnabled, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(SecurityPolicyColumnAllowedOrigins, crdb.ColumnTypeTextArray, crdb.Nullable()),
+func (*securityPolicyProjection) Name() string {
+ return SecurityPolicyProjectionTable
+}
+
+func (*securityPolicyProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(SecurityPolicyColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SecurityPolicyColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SecurityPolicyColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(SecurityPolicyColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(SecurityPolicyColumnEnabled, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(SecurityPolicyColumnAllowedOrigins, handler.ColumnTypeTextArray, handler.Nullable()),
},
- crdb.NewPrimaryKey(SecurityPolicyColumnInstanceID),
+ handler.NewPrimaryKey(SecurityPolicyColumnInstanceID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *securityPolicyProjection) reducers() []handler.AggregateReducer {
+func (p *securityPolicyProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.SecurityPolicySetEventType,
Reduce: p.reduceSecurityPolicySet,
@@ -79,7 +80,7 @@ func (p *securityPolicyProjection) reduceSecurityPolicySet(event eventstore.Even
if e.AllowedOrigins != nil {
changes = append(changes, handler.NewCol(SecurityPolicyColumnAllowedOrigins, e.AllowedOrigins))
}
- return crdb.NewUpsertStatement(
+ return handler.NewUpsertStatement(
e,
[]handler.Column{
handler.NewCol(SecurityPolicyColumnInstanceID, ""),
diff --git a/internal/query/projection/session.go b/internal/query/projection/session.go
index 7305d6a87c..816969d662 100644
--- a/internal/query/projection/session.go
+++ b/internal/query/projection/session.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/session"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -37,48 +37,49 @@ const (
SessionColumnTokenID = "token_id"
)
-type sessionProjection struct {
- crdb.StatementHandler
+type sessionProjection struct{}
+
+func newSessionProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(sessionProjection))
}
-func newSessionProjection(ctx context.Context, config crdb.StatementHandlerConfig) *sessionProjection {
- p := new(sessionProjection)
- config.ProjectionName = SessionsProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(SessionColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(SessionColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SessionColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SessionColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(SessionColumnState, crdb.ColumnTypeEnum),
- crdb.NewColumn(SessionColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(SessionColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(SessionColumnCreator, crdb.ColumnTypeText),
- crdb.NewColumn(SessionColumnUserID, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(SessionColumnUserCheckedAt, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(SessionColumnPasswordCheckedAt, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(SessionColumnIntentCheckedAt, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(SessionColumnWebAuthNCheckedAt, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(SessionColumnWebAuthNUserVerified, crdb.ColumnTypeBool, crdb.Nullable()),
- crdb.NewColumn(SessionColumnTOTPCheckedAt, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(SessionColumnOTPSMSCheckedAt, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(SessionColumnOTPEmailCheckedAt, crdb.ColumnTypeTimestamp, crdb.Nullable()),
- crdb.NewColumn(SessionColumnMetadata, crdb.ColumnTypeJSONB, crdb.Nullable()),
- crdb.NewColumn(SessionColumnTokenID, crdb.ColumnTypeText, crdb.Nullable()),
+func (*sessionProjection) Name() string {
+ return SessionsProjectionTable
+}
+
+func (*sessionProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(SessionColumnID, handler.ColumnTypeText),
+ handler.NewColumn(SessionColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SessionColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SessionColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(SessionColumnState, handler.ColumnTypeEnum),
+ handler.NewColumn(SessionColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(SessionColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(SessionColumnCreator, handler.ColumnTypeText),
+ handler.NewColumn(SessionColumnUserID, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(SessionColumnUserCheckedAt, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(SessionColumnPasswordCheckedAt, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(SessionColumnIntentCheckedAt, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(SessionColumnWebAuthNCheckedAt, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(SessionColumnWebAuthNUserVerified, handler.ColumnTypeBool, handler.Nullable()),
+ handler.NewColumn(SessionColumnTOTPCheckedAt, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(SessionColumnOTPSMSCheckedAt, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(SessionColumnOTPEmailCheckedAt, handler.ColumnTypeTimestamp, handler.Nullable()),
+ handler.NewColumn(SessionColumnMetadata, handler.ColumnTypeJSONB, handler.Nullable()),
+ handler.NewColumn(SessionColumnTokenID, handler.ColumnTypeText, handler.Nullable()),
},
- crdb.NewPrimaryKey(SessionColumnInstanceID, SessionColumnID),
+ handler.NewPrimaryKey(SessionColumnInstanceID, SessionColumnID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *sessionProjection) reducers() []handler.AggregateReducer {
+func (p *sessionProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: session.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: session.AddedType,
Reduce: p.reduceSessionAdded,
@@ -127,7 +128,7 @@ func (p *sessionProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(SMSColumnInstanceID),
@@ -136,7 +137,7 @@ func (p *sessionProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.HumanPasswordChangedType,
Reduce: p.reducePasswordChanged,
@@ -152,7 +153,7 @@ func (p *sessionProjection) reduceSessionAdded(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Sfrgf", "reduce.wrong.event.type %s", session.AddedType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnID, e.Aggregate().ID),
@@ -172,7 +173,7 @@ func (p *sessionProjection) reduceUserChecked(event eventstore.Event) (*handler.
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-saDg5", "reduce.wrong.event.type %s", session.UserCheckedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -193,7 +194,7 @@ func (p *sessionProjection) reducePasswordChecked(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SDgrb", "reduce.wrong.event.type %s", session.PasswordCheckedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -213,7 +214,7 @@ func (p *sessionProjection) reduceIntentChecked(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SDgr2", "reduce.wrong.event.type %s", session.IntentCheckedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -232,7 +233,7 @@ func (p *sessionProjection) reduceWebAuthNChecked(event eventstore.Event) (*hand
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-WieM4", "reduce.wrong.event.type %s", session.WebAuthNCheckedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -253,7 +254,7 @@ func (p *sessionProjection) reduceTOTPChecked(event eventstore.Event) (*handler.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Oqu8i", "reduce.wrong.event.type %s", session.TOTPCheckedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -273,7 +274,7 @@ func (p *sessionProjection) reduceOTPSMSChecked(event eventstore.Event) (*handle
return nil, err
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -293,7 +294,7 @@ func (p *sessionProjection) reduceOTPEmailChecked(event eventstore.Event) (*hand
return nil, err
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -313,7 +314,7 @@ func (p *sessionProjection) reduceTokenSet(event eventstore.Event) (*handler.Sta
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SAfd3", "reduce.wrong.event.type %s", session.TokenSetType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -333,7 +334,7 @@ func (p *sessionProjection) reduceMetadataSet(event eventstore.Event) (*handler.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SAfd3", "reduce.wrong.event.type %s", session.MetadataSetType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnChangeDate, e.CreationDate()),
@@ -353,7 +354,7 @@ func (p *sessionProjection) reduceSessionTerminated(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-SAftn", "reduce.wrong.event.type %s", session.TerminateType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(SessionColumnID, e.Aggregate().ID),
@@ -368,14 +369,14 @@ func (p *sessionProjection) reducePasswordChanged(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Deg3d", "reduce.wrong.event.type %s", user.HumanPasswordChangedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SessionColumnPasswordCheckedAt, nil),
},
[]handler.Condition{
handler.NewCond(SessionColumnUserID, e.Aggregate().ID),
- crdb.NewLessThanCond(SessionColumnPasswordCheckedAt, e.CreationDate()),
+ handler.NewLessThanCond(SessionColumnPasswordCheckedAt, e.CreationDate()),
},
), nil
}
diff --git a/internal/query/projection/session_test.go b/internal/query/projection/session_test.go
index 8ac52b7484..607b028ff4 100644
--- a/internal/query/projection/session_test.go
+++ b/internal/query/projection/session_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/session"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -37,9 +36,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceSessionAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -73,9 +71,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceUserChecked,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -106,9 +103,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reducePasswordChecked,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -139,9 +135,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceWebAuthNChecked,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -172,9 +167,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceIntentChecked,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -204,9 +198,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceTOTPChecked,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -236,9 +229,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceTokenSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -270,9 +262,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceMetadataSet,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -302,9 +293,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reduceSessionTerminated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("session"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("session"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -321,17 +311,17 @@ func TestSessionProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(SessionColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -348,7 +338,7 @@ func TestSessionProjection_reduces(t *testing.T) {
name: "reducePasswordChanged",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanPasswordChangedType),
+ user.HumanPasswordChangedType,
user.AggregateType,
[]byte(`{"secret": {
"cryptoType": 0,
@@ -360,9 +350,8 @@ func TestSessionProjection_reduces(t *testing.T) {
},
reduce: (&sessionProjection{}).reducePasswordChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/sms.go b/internal/query/projection/sms.go
index b2da5df130..eb173a4cf7 100644
--- a/internal/query/projection/sms.go
+++ b/internal/query/projection/sms.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -32,48 +32,49 @@ const (
SMSTwilioConfigColumnToken = "token"
)
-type smsConfigProjection struct {
- crdb.StatementHandler
+type smsConfigProjection struct{}
+
+func newSMSConfigProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(smsConfigProjection))
}
-func newSMSConfigProjection(ctx context.Context, config crdb.StatementHandlerConfig) *smsConfigProjection {
- p := new(smsConfigProjection)
- config.ProjectionName = SMSConfigProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(SMSColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(SMSColumnAggregateID, crdb.ColumnTypeText),
- crdb.NewColumn(SMSColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SMSColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SMSColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(SMSColumnState, crdb.ColumnTypeEnum),
- crdb.NewColumn(SMSColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(SMSColumnInstanceID, crdb.ColumnTypeText),
+func (*smsConfigProjection) Name() string {
+ return SMSConfigProjectionTable
+}
+
+func (*smsConfigProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(SMSColumnID, handler.ColumnTypeText),
+ handler.NewColumn(SMSColumnAggregateID, handler.ColumnTypeText),
+ handler.NewColumn(SMSColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SMSColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SMSColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(SMSColumnState, handler.ColumnTypeEnum),
+ handler.NewColumn(SMSColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(SMSColumnInstanceID, handler.ColumnTypeText),
},
- crdb.NewPrimaryKey(SMSColumnInstanceID, SMSColumnID),
+ handler.NewPrimaryKey(SMSColumnInstanceID, SMSColumnID),
),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(SMSTwilioConfigColumnSMSID, crdb.ColumnTypeText),
- crdb.NewColumn(SMSTwilioColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(SMSTwilioConfigColumnSID, crdb.ColumnTypeText),
- crdb.NewColumn(SMSTwilioConfigColumnSenderNumber, crdb.ColumnTypeText),
- crdb.NewColumn(SMSTwilioConfigColumnToken, crdb.ColumnTypeJSONB),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(SMSTwilioConfigColumnSMSID, handler.ColumnTypeText),
+ handler.NewColumn(SMSTwilioColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(SMSTwilioConfigColumnSID, handler.ColumnTypeText),
+ handler.NewColumn(SMSTwilioConfigColumnSenderNumber, handler.ColumnTypeText),
+ handler.NewColumn(SMSTwilioConfigColumnToken, handler.ColumnTypeJSONB),
},
- crdb.NewPrimaryKey(SMSTwilioColumnInstanceID, SMSTwilioConfigColumnSMSID),
+ handler.NewPrimaryKey(SMSTwilioColumnInstanceID, SMSTwilioConfigColumnSMSID),
smsTwilioTableSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *smsConfigProjection) reducers() []handler.AggregateReducer {
+func (p *smsConfigProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.SMSConfigTwilioAddedEventType,
Reduce: p.reduceSMSConfigTwilioAdded,
@@ -113,9 +114,9 @@ func (p *smsConfigProjection) reduceSMSConfigTwilioAdded(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-s8efs", "reduce.wrong.event.type %s", instance.SMSConfigTwilioAddedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(SMSColumnID, e.ID),
handler.NewCol(SMSColumnAggregateID, e.Aggregate().ID),
@@ -127,7 +128,7 @@ func (p *smsConfigProjection) reduceSMSConfigTwilioAdded(event eventstore.Event)
handler.NewCol(SMSColumnSequence, e.Sequence()),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(SMSTwilioConfigColumnSMSID, e.ID),
handler.NewCol(SMSTwilioColumnInstanceID, e.Aggregate().InstanceID),
@@ -135,7 +136,7 @@ func (p *smsConfigProjection) reduceSMSConfigTwilioAdded(event eventstore.Event)
handler.NewCol(SMSTwilioConfigColumnToken, e.Token),
handler.NewCol(SMSTwilioConfigColumnSenderNumber, e.SenderNumber),
},
- crdb.WithTableSuffix(smsTwilioTableSuffix),
+ handler.WithTableSuffix(smsTwilioTableSuffix),
),
), nil
}
@@ -153,17 +154,17 @@ func (p *smsConfigProjection) reduceSMSConfigTwilioChanged(event eventstore.Even
columns = append(columns, handler.NewCol(SMSTwilioConfigColumnSenderNumber, *e.SenderNumber))
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
columns,
[]handler.Condition{
handler.NewCond(SMSTwilioConfigColumnSMSID, e.ID),
handler.NewCond(SMSTwilioColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(smsTwilioTableSuffix),
+ handler.WithTableSuffix(smsTwilioTableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(SMSColumnChangeDate, e.CreationDate()),
handler.NewCol(SMSColumnSequence, e.Sequence()),
@@ -186,17 +187,17 @@ func (p *smsConfigProjection) reduceSMSConfigTwilioTokenChanged(event eventstore
columns = append(columns, handler.NewCol(SMSTwilioConfigColumnToken, e.Token))
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
columns,
[]handler.Condition{
handler.NewCond(SMSTwilioConfigColumnSMSID, e.ID),
handler.NewCond(SMSTwilioColumnInstanceID, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(smsTwilioTableSuffix),
+ handler.WithTableSuffix(smsTwilioTableSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(SMSColumnChangeDate, e.CreationDate()),
handler.NewCol(SMSColumnSequence, e.Sequence()),
@@ -214,7 +215,7 @@ func (p *smsConfigProjection) reduceSMSConfigActivated(event eventstore.Event) (
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-fj9Ef", "reduce.wrong.event.type %s", instance.SMSConfigActivatedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SMSColumnState, domain.SMSConfigStateActive),
@@ -233,7 +234,7 @@ func (p *smsConfigProjection) reduceSMSConfigDeactivated(event eventstore.Event)
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-dj9Js", "reduce.wrong.event.type %s", instance.SMSConfigDeactivatedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SMSColumnState, domain.SMSConfigStateInactive),
@@ -252,7 +253,7 @@ func (p *smsConfigProjection) reduceSMSConfigRemoved(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-s9JJf", "reduce.wrong.event.type %s", instance.SMSConfigRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(SMSColumnID, e.ID),
diff --git a/internal/query/projection/sms_test.go b/internal/query/projection/sms_test.go
index 17ce2bec32..c3ca8f99f8 100644
--- a/internal/query/projection/sms_test.go
+++ b/internal/query/projection/sms_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -25,10 +24,11 @@ func TestSMSProjection_reduces(t *testing.T) {
{
name: "instance reduceSMSTwilioAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMSConfigTwilioAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMSConfigTwilioAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "id",
"sid": "sid",
"token": {
@@ -39,13 +39,12 @@ func TestSMSProjection_reduces(t *testing.T) {
},
"senderNumber": "sender-number"
}`),
- ), instance.SMSConfigTwilioAddedEventMapper),
+ ), instance.SMSConfigTwilioAddedEventMapper),
},
reduce: (&smsConfigProjection{}).reduceSMSConfigTwilioAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -83,21 +82,21 @@ func TestSMSProjection_reduces(t *testing.T) {
{
name: "instance reduceSMSConfigTwilioChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMSConfigTwilioChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMSConfigTwilioChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "id",
"sid": "sid",
"senderNumber": "sender-number"
}`),
- ), instance.SMSConfigTwilioChangedEventMapper),
+ ), instance.SMSConfigTwilioChangedEventMapper),
},
reduce: (&smsConfigProjection{}).reduceSMSConfigTwilioChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -125,10 +124,11 @@ func TestSMSProjection_reduces(t *testing.T) {
{
name: "instance reduceSMSConfigTwilioTokenChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMSConfigTwilioTokenChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMSConfigTwilioTokenChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "id",
"token": {
"cryptoType": 0,
@@ -137,13 +137,12 @@ func TestSMSProjection_reduces(t *testing.T) {
"crypted": "Y3J5cHRlZA=="
}
}`),
- ), instance.SMSConfigTwilioTokenChangedEventMapper),
+ ), instance.SMSConfigTwilioTokenChangedEventMapper),
},
reduce: (&smsConfigProjection{}).reduceSMSConfigTwilioTokenChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -175,19 +174,19 @@ func TestSMSProjection_reduces(t *testing.T) {
{
name: "instance reduceSMSConfigActivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMSConfigActivatedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMSConfigActivatedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "id"
}`),
- ), instance.SMSConfigActivatedEventMapper),
+ ), instance.SMSConfigActivatedEventMapper),
},
reduce: (&smsConfigProjection{}).reduceSMSConfigActivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -207,19 +206,19 @@ func TestSMSProjection_reduces(t *testing.T) {
{
name: "instance reduceSMSConfigDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMSConfigDeactivatedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMSConfigDeactivatedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "id"
}`),
- ), instance.SMSConfigDeactivatedEventMapper),
+ ), instance.SMSConfigDeactivatedEventMapper),
},
reduce: (&smsConfigProjection{}).reduceSMSConfigDeactivated,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -239,19 +238,19 @@ func TestSMSProjection_reduces(t *testing.T) {
{
name: "instance reduceSMSConfigRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMSConfigRemovedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMSConfigRemovedEventType,
+ instance.AggregateType,
+ []byte(`{
"id": "id"
}`),
- ), instance.SMSConfigRemovedEventMapper),
+ ), instance.SMSConfigRemovedEventMapper),
},
reduce: (&smsConfigProjection{}).reduceSMSConfigRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -268,17 +267,17 @@ func TestSMSProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(SMSColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/smtp.go b/internal/query/projection/smtp.go
index c8c96e8713..40f1519508 100644
--- a/internal/query/projection/smtp.go
+++ b/internal/query/projection/smtp.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -28,42 +28,43 @@ const (
SMTPConfigColumnSMTPPassword = "password"
)
-type smtpConfigProjection struct {
- crdb.StatementHandler
+type smtpConfigProjection struct{}
+
+func newSMTPConfigProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(smtpConfigProjection))
}
-func newSMTPConfigProjection(ctx context.Context, config crdb.StatementHandlerConfig) *smtpConfigProjection {
- p := new(smtpConfigProjection)
- config.ProjectionName = SMTPConfigProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(SMTPConfigColumnAggregateID, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SMTPConfigColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(SMTPConfigColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(SMTPConfigColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnTLS, crdb.ColumnTypeBool),
- crdb.NewColumn(SMTPConfigColumnSenderAddress, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnSenderName, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnReplyToAddress, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnSMTPHost, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnSMTPUser, crdb.ColumnTypeText),
- crdb.NewColumn(SMTPConfigColumnSMTPPassword, crdb.ColumnTypeJSONB, crdb.Nullable()),
+func (*smtpConfigProjection) Name() string {
+ return SMTPConfigProjectionTable
+}
+
+func (*smtpConfigProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(SMTPConfigColumnAggregateID, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SMTPConfigColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(SMTPConfigColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(SMTPConfigColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnTLS, handler.ColumnTypeBool),
+ handler.NewColumn(SMTPConfigColumnSenderAddress, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnSenderName, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnReplyToAddress, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnSMTPHost, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnSMTPUser, handler.ColumnTypeText),
+ handler.NewColumn(SMTPConfigColumnSMTPPassword, handler.ColumnTypeJSONB, handler.Nullable()),
},
- crdb.NewPrimaryKey(SMTPConfigColumnInstanceID, SMTPConfigColumnAggregateID),
+ handler.NewPrimaryKey(SMTPConfigColumnInstanceID, SMTPConfigColumnAggregateID),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *smtpConfigProjection) reducers() []handler.AggregateReducer {
+func (p *smtpConfigProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.SMTPConfigAddedEventType,
Reduce: p.reduceSMTPConfigAdded,
@@ -94,7 +95,7 @@ func (p *smtpConfigProjection) reduceSMTPConfigAdded(event eventstore.Event) (*h
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-sk99F", "reduce.wrong.event.type %s", instance.SMTPConfigAddedEventType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(SMTPConfigColumnAggregateID, e.Aggregate().ID),
@@ -141,7 +142,7 @@ func (p *smtpConfigProjection) reduceSMTPConfigChanged(event eventstore.Event) (
if e.User != nil {
columns = append(columns, handler.NewCol(SMTPConfigColumnSMTPUser, *e.User))
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
columns,
[]handler.Condition{
@@ -157,7 +158,7 @@ func (p *smtpConfigProjection) reduceSMTPConfigPasswordChanged(event eventstore.
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-fk02f", "reduce.wrong.event.type %s", instance.SMTPConfigChangedEventType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(SMTPConfigColumnChangeDate, e.CreationDate()),
@@ -176,7 +177,7 @@ func (p *smtpConfigProjection) reduceSMTPConfigRemoved(event eventstore.Event) (
if err != nil {
return nil, err
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(SMTPConfigColumnAggregateID, e.Aggregate().ID),
diff --git a/internal/query/projection/smtp_test.go b/internal/query/projection/smtp_test.go
index 9c7efb4327..922ef12478 100644
--- a/internal/query/projection/smtp_test.go
+++ b/internal/query/projection/smtp_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
)
@@ -23,10 +22,11 @@ func TestSMTPConfigProjection_reduces(t *testing.T) {
{
name: "reduceSMTPConfigChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMTPConfigChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMTPConfigChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"tls": true,
"senderAddress": "sender",
"senderName": "name",
@@ -34,14 +34,13 @@ func TestSMTPConfigProjection_reduces(t *testing.T) {
"host": "host",
"user": "user"
}`,
- ),
- ), instance.SMTPConfigChangedEventMapper),
+ ),
+ ), instance.SMTPConfigChangedEventMapper),
},
reduce: (&smtpConfigProjection{}).reduceSMTPConfigChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -66,10 +65,11 @@ func TestSMTPConfigProjection_reduces(t *testing.T) {
{
name: "reduceSMTPConfigAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMTPConfigAddedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMTPConfigAddedEventType,
+ instance.AggregateType,
+ []byte(`{
"tls": true,
"senderAddress": "sender",
"senderName": "name",
@@ -82,13 +82,12 @@ func TestSMTPConfigProjection_reduces(t *testing.T) {
"keyId": "key-id"
}
}`),
- ), instance.SMTPConfigAddedEventMapper),
+ ), instance.SMTPConfigAddedEventMapper),
},
reduce: (&smtpConfigProjection{}).reduceSMTPConfigAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -116,23 +115,23 @@ func TestSMTPConfigProjection_reduces(t *testing.T) {
{
name: "reduceSMTPConfigPasswordChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.SMTPConfigPasswordChangedEventType),
- instance.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ instance.SMTPConfigPasswordChangedEventType,
+ instance.AggregateType,
+ []byte(`{
"password": {
"cryptoType": 0,
"algorithm": "RSA-265",
"keyId": "key-id"
}
}`),
- ), instance.SMTPConfigPasswordChangedEventMapper),
+ ), instance.SMTPConfigPasswordChangedEventMapper),
},
reduce: (&smtpConfigProjection{}).reduceSMTPConfigPasswordChanged,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -153,16 +152,15 @@ func TestSMTPConfigProjection_reduces(t *testing.T) {
name: "reduceSMTPConfigRemoved",
args: args{
event: getEvent(testEvent(
- repository.EventType(instance.SMTPConfigRemovedEventType),
+ instance.SMTPConfigRemovedEventType,
instance.AggregateType,
[]byte(`{}`),
), instance.SMTPConfigRemovedEventMapper),
},
reduce: (&smtpConfigProjection{}).reduceSMTPConfigRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -179,17 +177,17 @@ func TestSMTPConfigProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(SMTPConfigColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/user.go b/internal/query/projection/user.go
index a7ad4a3450..cafbbfee7d 100644
--- a/internal/query/projection/user.go
+++ b/internal/query/projection/user.go
@@ -7,17 +7,13 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
)
-type userProjection struct {
- crdb.StatementHandler
-}
-
const (
UserTable = "projections.users8"
UserHumanTable = UserTable + "_" + UserHumanSuffix
@@ -76,82 +72,87 @@ const (
NotifyPasswordSetCol = "password_set"
)
-func newUserProjection(ctx context.Context, config crdb.StatementHandlerConfig) *userProjection {
- p := new(userProjection)
- config.ProjectionName = UserTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewMultiTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(UserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(UserStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(UserResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserUsernameCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(UserOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- },
- crdb.NewPrimaryKey(UserInstanceIDCol, UserIDCol),
- crdb.WithIndex(crdb.NewIndex("username", []string{UserUsernameCol})),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{UserResourceOwnerCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{UserOwnerRemovedCol})),
- ),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(HumanUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(HumanUserInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(HumanFirstNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(HumanLastNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(HumanNickNameCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(HumanDisplayNameCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(HumanPreferredLanguageCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(HumanGenderCol, crdb.ColumnTypeEnum, crdb.Nullable()),
- crdb.NewColumn(HumanAvatarURLCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(HumanEmailCol, crdb.ColumnTypeText),
- crdb.NewColumn(HumanIsEmailVerifiedCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(HumanPhoneCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(HumanIsPhoneVerifiedCol, crdb.ColumnTypeBool, crdb.Nullable()),
- },
- crdb.NewPrimaryKey(HumanUserInstanceIDCol, HumanUserIDCol),
- UserHumanSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- ),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(MachineUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(MachineUserInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(MachineNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(MachineDescriptionCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(MachineHasSecretCol, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(MachineAccessTokenTypeCol, crdb.ColumnTypeEnum, crdb.Default(0)),
- },
- crdb.NewPrimaryKey(MachineUserInstanceIDCol, MachineUserIDCol),
- UserMachineSuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- ),
- crdb.NewSuffixedTable([]*crdb.Column{
- crdb.NewColumn(NotifyUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(NotifyInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(NotifyLastEmailCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(NotifyVerifiedEmailCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(NotifyLastPhoneCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(NotifyVerifiedPhoneCol, crdb.ColumnTypeText, crdb.Nullable()),
- crdb.NewColumn(NotifyPasswordSetCol, crdb.ColumnTypeBool, crdb.Default(false)),
- },
- crdb.NewPrimaryKey(NotifyInstanceIDCol, NotifyUserIDCol),
- UserNotifySuffix,
- crdb.WithForeignKey(crdb.NewForeignKeyOfPublicKeys()),
- ),
- )
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
+type userProjection struct{}
+
+func newUserProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(userProjection))
}
-func (p *userProjection) reducers() []handler.AggregateReducer {
+func (*userProjection) Name() string {
+ return UserTable
+}
+
+func (*userProjection) Init() *old_handler.Check {
+ return handler.NewMultiTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(UserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(UserCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(UserStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(UserResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(UserInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(UserUsernameCol, handler.ColumnTypeText),
+ handler.NewColumn(UserTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(UserOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
+ },
+ handler.NewPrimaryKey(UserInstanceIDCol, UserIDCol),
+ handler.WithIndex(handler.NewIndex("username", []string{UserUsernameCol})),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{UserResourceOwnerCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{UserOwnerRemovedCol})),
+ ),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(HumanUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(HumanUserInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(HumanFirstNameCol, handler.ColumnTypeText),
+ handler.NewColumn(HumanLastNameCol, handler.ColumnTypeText),
+ handler.NewColumn(HumanNickNameCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(HumanDisplayNameCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(HumanPreferredLanguageCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(HumanGenderCol, handler.ColumnTypeEnum, handler.Nullable()),
+ handler.NewColumn(HumanAvatarURLCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(HumanEmailCol, handler.ColumnTypeText),
+ handler.NewColumn(HumanIsEmailVerifiedCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(HumanPhoneCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(HumanIsPhoneVerifiedCol, handler.ColumnTypeBool, handler.Nullable()),
+ },
+ handler.NewPrimaryKey(HumanUserInstanceIDCol, HumanUserIDCol),
+ UserHumanSuffix,
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ ),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(MachineUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(MachineUserInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(MachineNameCol, handler.ColumnTypeText),
+ handler.NewColumn(MachineDescriptionCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(MachineHasSecretCol, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(MachineAccessTokenTypeCol, handler.ColumnTypeEnum, handler.Default(0)),
+ },
+ handler.NewPrimaryKey(MachineUserInstanceIDCol, MachineUserIDCol),
+ UserMachineSuffix,
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ ),
+ handler.NewSuffixedTable([]*handler.InitColumn{
+ handler.NewColumn(NotifyUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(NotifyInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(NotifyLastEmailCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(NotifyVerifiedEmailCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(NotifyLastPhoneCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(NotifyVerifiedPhoneCol, handler.ColumnTypeText, handler.Nullable()),
+ handler.NewColumn(NotifyPasswordSetCol, handler.ColumnTypeBool, handler.Default(false)),
+ },
+ handler.NewPrimaryKey(NotifyInstanceIDCol, NotifyUserIDCol),
+ UserNotifySuffix,
+ handler.WithForeignKey(handler.NewForeignKeyOfPublicKeys()),
+ ),
+ )
+}
+
+func (p *userProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserV1AddedType,
Reduce: p.reduceHumanAdded,
@@ -292,7 +293,7 @@ func (p *userProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -301,7 +302,7 @@ func (p *userProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(UserInstanceIDCol),
@@ -316,9 +317,9 @@ func (p *userProjection) reduceHumanAdded(event eventstore.Event) (*handler.Stat
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Ebynp", "reduce.wrong.event.type %s", user.HumanAddedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(UserIDCol, e.Aggregate().ID),
handler.NewCol(UserCreationDateCol, e.CreationDate()),
@@ -331,7 +332,7 @@ func (p *userProjection) reduceHumanAdded(event eventstore.Event) (*handler.Stat
handler.NewCol(UserTypeCol, domain.UserTypeHuman),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(HumanUserIDCol, e.Aggregate().ID),
handler.NewCol(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
@@ -344,9 +345,9 @@ func (p *userProjection) reduceHumanAdded(event eventstore.Event) (*handler.Stat
handler.NewCol(HumanEmailCol, e.EmailAddress),
handler.NewCol(HumanPhoneCol, &sql.NullString{String: string(e.PhoneNumber), Valid: e.PhoneNumber != ""}),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCol(NotifyInstanceIDCol, e.Aggregate().InstanceID),
@@ -354,7 +355,7 @@ func (p *userProjection) reduceHumanAdded(event eventstore.Event) (*handler.Stat
handler.NewCol(NotifyLastPhoneCol, &sql.NullString{String: string(e.PhoneNumber), Valid: e.PhoneNumber != ""}),
handler.NewCol(NotifyPasswordSetCol, user.SecretOrEncodedHash(e.Secret, e.EncodedHash) != ""),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
),
), nil
}
@@ -364,9 +365,9 @@ func (p *userProjection) reduceHumanRegistered(event eventstore.Event) (*handler
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-xE53M", "reduce.wrong.event.type %s", user.HumanRegisteredType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(UserIDCol, e.Aggregate().ID),
handler.NewCol(UserCreationDateCol, e.CreationDate()),
@@ -379,7 +380,7 @@ func (p *userProjection) reduceHumanRegistered(event eventstore.Event) (*handler
handler.NewCol(UserTypeCol, domain.UserTypeHuman),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(HumanUserIDCol, e.Aggregate().ID),
handler.NewCol(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
@@ -392,9 +393,9 @@ func (p *userProjection) reduceHumanRegistered(event eventstore.Event) (*handler
handler.NewCol(HumanEmailCol, e.EmailAddress),
handler.NewCol(HumanPhoneCol, &sql.NullString{String: string(e.PhoneNumber), Valid: e.PhoneNumber != ""}),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCol(NotifyInstanceIDCol, e.Aggregate().InstanceID),
@@ -402,7 +403,7 @@ func (p *userProjection) reduceHumanRegistered(event eventstore.Event) (*handler
handler.NewCol(NotifyLastPhoneCol, &sql.NullString{String: string(e.PhoneNumber), Valid: e.PhoneNumber != ""}),
handler.NewCol(NotifyPasswordSetCol, user.SecretOrEncodedHash(e.Secret, e.EncodedHash) != ""),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
),
), nil
}
@@ -412,7 +413,7 @@ func (p *userProjection) reduceHumanInitCodeAdded(event eventstore.Event) (*hand
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Dvgws", "reduce.wrong.event.type %s", user.HumanInitialCodeAddedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserStateCol, domain.UserStateInitial),
@@ -429,7 +430,7 @@ func (p *userProjection) reduceHumanInitCodeSucceeded(event eventstore.Event) (*
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Dfvwq", "reduce.wrong.event.type %s", user.HumanInitializedCheckSucceededType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserStateCol, domain.UserStateActive),
@@ -447,7 +448,7 @@ func (p *userProjection) reduceUserLocked(event eventstore.Event) (*handler.Stat
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-exyBF", "reduce.wrong.event.type %s", user.UserLockedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
@@ -467,7 +468,7 @@ func (p *userProjection) reduceUserUnlocked(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-JIyRl", "reduce.wrong.event.type %s", user.UserUnlockedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
@@ -487,7 +488,7 @@ func (p *userProjection) reduceUserDeactivated(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-6BNjj", "reduce.wrong.event.type %s", user.UserDeactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
@@ -507,7 +508,7 @@ func (p *userProjection) reduceUserReactivated(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-IoF6j", "reduce.wrong.event.type %s", user.UserReactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
@@ -527,7 +528,7 @@ func (p *userProjection) reduceUserRemoved(event eventstore.Event) (*handler.Sta
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-BQB2t", "reduce.wrong.event.type %s", user.UserRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(UserIDCol, e.Aggregate().ID),
@@ -542,7 +543,7 @@ func (p *userProjection) reduceUserNameChanged(event eventstore.Event) (*handler
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-QNKyV", "reduce.wrong.event.type %s", user.UserUserNameChangedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
@@ -562,7 +563,7 @@ func (p *userProjection) reduceDomainClaimed(event eventstore.Event) (*handler.S
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-ASwf3", "reduce.wrong.event.type %s", user.UserDomainClaimedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
@@ -606,9 +607,9 @@ func (p *userProjection) reduceHumanProfileChanged(event eventstore.Event) (*han
cols = append(cols, handler.NewCol(HumanGenderCol, *e.Gender))
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -618,13 +619,13 @@ func (p *userProjection) reduceHumanProfileChanged(event eventstore.Event) (*han
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
cols,
[]handler.Condition{
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
), nil
}
@@ -635,9 +636,9 @@ func (p *userProjection) reduceHumanPhoneChanged(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-xOGIA", "reduce.wrong.event.type %s", user.HumanPhoneChangedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -647,7 +648,7 @@ func (p *userProjection) reduceHumanPhoneChanged(event eventstore.Event) (*handl
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(HumanPhoneCol, e.PhoneNumber),
handler.NewCol(HumanIsPhoneVerifiedCol, false),
@@ -656,9 +657,9 @@ func (p *userProjection) reduceHumanPhoneChanged(event eventstore.Event) (*handl
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(NotifyLastPhoneCol, &sql.NullString{String: string(e.PhoneNumber), Valid: e.PhoneNumber != ""}),
},
@@ -666,7 +667,7 @@ func (p *userProjection) reduceHumanPhoneChanged(event eventstore.Event) (*handl
handler.NewCond(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
),
), nil
}
@@ -677,9 +678,9 @@ func (p *userProjection) reduceHumanPhoneRemoved(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-JI4S1", "reduce.wrong.event.type %s", user.HumanPhoneRemovedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -689,7 +690,7 @@ func (p *userProjection) reduceHumanPhoneRemoved(event eventstore.Event) (*handl
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(HumanPhoneCol, nil),
handler.NewCol(HumanIsPhoneVerifiedCol, nil),
@@ -698,9 +699,9 @@ func (p *userProjection) reduceHumanPhoneRemoved(event eventstore.Event) (*handl
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(NotifyLastPhoneCol, nil),
handler.NewCol(NotifyVerifiedPhoneCol, nil),
@@ -709,7 +710,7 @@ func (p *userProjection) reduceHumanPhoneRemoved(event eventstore.Event) (*handl
handler.NewCond(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
),
), nil
}
@@ -720,9 +721,9 @@ func (p *userProjection) reduceHumanPhoneVerified(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-LBnqG", "reduce.wrong.event.type %s", user.HumanPhoneVerifiedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -732,7 +733,7 @@ func (p *userProjection) reduceHumanPhoneVerified(event eventstore.Event) (*hand
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(HumanIsPhoneVerifiedCol, true),
},
@@ -740,17 +741,17 @@ func (p *userProjection) reduceHumanPhoneVerified(event eventstore.Event) (*hand
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
- crdb.NewCopyCol(NotifyVerifiedPhoneCol, NotifyLastPhoneCol),
+ handler.NewCopyCol(NotifyVerifiedPhoneCol, NotifyLastPhoneCol),
},
[]handler.Condition{
handler.NewCond(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
),
), nil
}
@@ -761,9 +762,9 @@ func (p *userProjection) reduceHumanEmailChanged(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-KwiHa", "reduce.wrong.event.type %s", user.HumanEmailChangedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -773,7 +774,7 @@ func (p *userProjection) reduceHumanEmailChanged(event eventstore.Event) (*handl
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(HumanEmailCol, e.EmailAddress),
handler.NewCol(HumanIsEmailVerifiedCol, false),
@@ -782,9 +783,9 @@ func (p *userProjection) reduceHumanEmailChanged(event eventstore.Event) (*handl
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(NotifyLastEmailCol, &sql.NullString{String: string(e.EmailAddress), Valid: e.EmailAddress != ""}),
},
@@ -792,7 +793,7 @@ func (p *userProjection) reduceHumanEmailChanged(event eventstore.Event) (*handl
handler.NewCond(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
),
), nil
}
@@ -803,9 +804,9 @@ func (p *userProjection) reduceHumanEmailVerified(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-JzcDq", "reduce.wrong.event.type %s", user.HumanEmailVerifiedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -815,7 +816,7 @@ func (p *userProjection) reduceHumanEmailVerified(event eventstore.Event) (*hand
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(HumanIsEmailVerifiedCol, true),
},
@@ -823,17 +824,17 @@ func (p *userProjection) reduceHumanEmailVerified(event eventstore.Event) (*hand
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
- crdb.NewCopyCol(NotifyVerifiedEmailCol, NotifyLastEmailCol),
+ handler.NewCopyCol(NotifyVerifiedEmailCol, NotifyLastEmailCol),
},
[]handler.Condition{
handler.NewCond(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
),
), nil
}
@@ -844,9 +845,9 @@ func (p *userProjection) reduceHumanAvatarAdded(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-eDEdt", "reduce.wrong.event.type %s", user.HumanAvatarAddedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -856,7 +857,7 @@ func (p *userProjection) reduceHumanAvatarAdded(event eventstore.Event) (*handle
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(HumanAvatarURLCol, e.StoreKey),
},
@@ -864,7 +865,7 @@ func (p *userProjection) reduceHumanAvatarAdded(event eventstore.Event) (*handle
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
), nil
}
@@ -875,9 +876,9 @@ func (p *userProjection) reduceHumanAvatarRemoved(event eventstore.Event) (*hand
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-KhETX", "reduce.wrong.event.type %s", user.HumanAvatarRemovedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -887,7 +888,7 @@ func (p *userProjection) reduceHumanAvatarRemoved(event eventstore.Event) (*hand
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(HumanAvatarURLCol, nil),
},
@@ -895,7 +896,7 @@ func (p *userProjection) reduceHumanAvatarRemoved(event eventstore.Event) (*hand
handler.NewCond(HumanUserIDCol, e.Aggregate().ID),
handler.NewCond(HumanUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserHumanSuffix),
+ handler.WithTableSuffix(UserHumanSuffix),
),
), nil
}
@@ -906,7 +907,7 @@ func (p *userProjection) reduceHumanPasswordChanged(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-jqXUY", "reduce.wrong.event.type %s", user.HumanPasswordChangedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
e,
[]handler.Column{
handler.NewCol(NotifyPasswordSetCol, true),
@@ -915,7 +916,7 @@ func (p *userProjection) reduceHumanPasswordChanged(event eventstore.Event) (*ha
handler.NewCond(NotifyUserIDCol, e.Aggregate().ID),
handler.NewCond(NotifyInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserNotifySuffix),
+ handler.WithTableSuffix(UserNotifySuffix),
), nil
}
@@ -924,9 +925,9 @@ func (p *userProjection) reduceMachineSecretSet(event eventstore.Event) (*handle
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-x0p1n1i", "reduce.wrong.event.type %s", user.MachineSecretSetType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -936,7 +937,7 @@ func (p *userProjection) reduceMachineSecretSet(event eventstore.Event) (*handle
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(MachineHasSecretCol, true),
},
@@ -944,7 +945,7 @@ func (p *userProjection) reduceMachineSecretSet(event eventstore.Event) (*handle
handler.NewCond(MachineUserIDCol, e.Aggregate().ID),
handler.NewCond(MachineUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserMachineSuffix),
+ handler.WithTableSuffix(UserMachineSuffix),
),
), nil
}
@@ -955,9 +956,9 @@ func (p *userProjection) reduceMachineSecretRemoved(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-x0p6n1i", "reduce.wrong.event.type %s", user.MachineSecretRemovedType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -967,7 +968,7 @@ func (p *userProjection) reduceMachineSecretRemoved(event eventstore.Event) (*ha
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(MachineHasSecretCol, false),
},
@@ -975,7 +976,7 @@ func (p *userProjection) reduceMachineSecretRemoved(event eventstore.Event) (*ha
handler.NewCond(MachineUserIDCol, e.Aggregate().ID),
handler.NewCond(MachineUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserMachineSuffix),
+ handler.WithTableSuffix(UserMachineSuffix),
),
), nil
}
@@ -986,9 +987,9 @@ func (p *userProjection) reduceMachineAdded(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-q7ier", "reduce.wrong.event.type %s", user.MachineAddedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(UserIDCol, e.Aggregate().ID),
handler.NewCol(UserCreationDateCol, e.CreationDate()),
@@ -1001,7 +1002,7 @@ func (p *userProjection) reduceMachineAdded(event eventstore.Event) (*handler.St
handler.NewCol(UserTypeCol, domain.UserTypeMachine),
},
),
- crdb.AddCreateStatement(
+ handler.AddCreateStatement(
[]handler.Column{
handler.NewCol(MachineUserIDCol, e.Aggregate().ID),
handler.NewCol(MachineUserInstanceIDCol, e.Aggregate().InstanceID),
@@ -1009,7 +1010,7 @@ func (p *userProjection) reduceMachineAdded(event eventstore.Event) (*handler.St
handler.NewCol(MachineDescriptionCol, &sql.NullString{String: e.Description, Valid: e.Description != ""}),
handler.NewCol(MachineAccessTokenTypeCol, e.AccessTokenType),
},
- crdb.WithTableSuffix(UserMachineSuffix),
+ handler.WithTableSuffix(UserMachineSuffix),
),
), nil
}
@@ -1031,12 +1032,12 @@ func (p *userProjection) reduceMachineChanged(event eventstore.Event) (*handler.
cols = append(cols, handler.NewCol(MachineAccessTokenTypeCol, e.AccessTokenType))
}
if len(cols) == 0 {
- return crdb.NewNoOpStatement(e), nil
+ return handler.NewNoOpStatement(e), nil
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
[]handler.Column{
handler.NewCol(UserChangeDateCol, e.CreationDate()),
handler.NewCol(UserSequenceCol, e.Sequence()),
@@ -1046,13 +1047,13 @@ func (p *userProjection) reduceMachineChanged(event eventstore.Event) (*handler.
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
},
),
- crdb.AddUpdateStatement(
+ handler.AddUpdateStatement(
cols,
[]handler.Condition{
handler.NewCond(MachineUserIDCol, e.Aggregate().ID),
handler.NewCond(MachineUserInstanceIDCol, e.Aggregate().InstanceID),
},
- crdb.WithTableSuffix(UserMachineSuffix),
+ handler.WithTableSuffix(UserMachineSuffix),
),
), nil
@@ -1064,7 +1065,7 @@ func (p *userProjection) reduceOwnerRemoved(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-NCsdV", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(UserInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/user_auth_method.go b/internal/query/projection/user_auth_method.go
index 7e40fcb903..49455c81bd 100644
--- a/internal/query/projection/user_auth_method.go
+++ b/internal/query/projection/user_auth_method.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -29,42 +29,43 @@ const (
UserAuthMethodOwnerRemovedCol = "owner_removed"
)
-type userAuthMethodProjection struct {
- crdb.StatementHandler
+type userAuthMethodProjection struct{}
+
+func newUserAuthMethodProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(userAuthMethodProjection))
}
-func newUserAuthMethodProjection(ctx context.Context, config crdb.StatementHandlerConfig) *userAuthMethodProjection {
- p := new(userAuthMethodProjection)
- config.ProjectionName = UserAuthMethodTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(UserAuthMethodUserIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserAuthMethodTypeCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(UserAuthMethodTokenIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserAuthMethodCreationDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserAuthMethodChangeDateCol, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserAuthMethodSequenceCol, crdb.ColumnTypeInt64),
- crdb.NewColumn(UserAuthMethodStateCol, crdb.ColumnTypeEnum),
- crdb.NewColumn(UserAuthMethodResourceOwnerCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserAuthMethodInstanceIDCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserAuthMethodNameCol, crdb.ColumnTypeText),
- crdb.NewColumn(UserAuthMethodOwnerRemovedCol, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*userAuthMethodProjection) Name() string {
+ return UserAuthMethodTable
+}
+
+func (*userAuthMethodProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(UserAuthMethodUserIDCol, handler.ColumnTypeText),
+ handler.NewColumn(UserAuthMethodTypeCol, handler.ColumnTypeEnum),
+ handler.NewColumn(UserAuthMethodTokenIDCol, handler.ColumnTypeText),
+ handler.NewColumn(UserAuthMethodCreationDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserAuthMethodChangeDateCol, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserAuthMethodSequenceCol, handler.ColumnTypeInt64),
+ handler.NewColumn(UserAuthMethodStateCol, handler.ColumnTypeEnum),
+ handler.NewColumn(UserAuthMethodResourceOwnerCol, handler.ColumnTypeText),
+ handler.NewColumn(UserAuthMethodInstanceIDCol, handler.ColumnTypeText),
+ handler.NewColumn(UserAuthMethodNameCol, handler.ColumnTypeText),
+ handler.NewColumn(UserAuthMethodOwnerRemovedCol, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(UserAuthMethodInstanceIDCol, UserAuthMethodUserIDCol, UserAuthMethodTypeCol, UserAuthMethodTokenIDCol),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{UserAuthMethodResourceOwnerCol})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{UserAuthMethodOwnerRemovedCol})),
+ handler.NewPrimaryKey(UserAuthMethodInstanceIDCol, UserAuthMethodUserIDCol, UserAuthMethodTypeCol, UserAuthMethodTokenIDCol),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{UserAuthMethodResourceOwnerCol})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{UserAuthMethodOwnerRemovedCol})),
),
)
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *userAuthMethodProjection) reducers() []handler.AggregateReducer {
+func (p *userAuthMethodProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.HumanPasswordlessTokenAddedType,
Reduce: p.reduceInitAuthMethod,
@@ -129,7 +130,7 @@ func (p *userAuthMethodProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -138,7 +139,7 @@ func (p *userAuthMethodProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(UserAuthMethodInstanceIDCol),
@@ -164,7 +165,7 @@ func (p *userAuthMethodProjection) reduceInitAuthMethod(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-f92f", "reduce.wrong.event.type %v", []eventstore.EventType{user.HumanPasswordlessTokenAddedType, user.HumanU2FTokenAddedType})
}
- return crdb.NewUpsertStatement(
+ return handler.NewUpsertStatement(
event,
[]handler.Column{
handler.NewCol(UserAuthMethodInstanceIDCol, nil),
@@ -174,8 +175,8 @@ func (p *userAuthMethodProjection) reduceInitAuthMethod(event eventstore.Event)
},
[]handler.Column{
handler.NewCol(UserAuthMethodTokenIDCol, tokenID),
- handler.NewCol(UserAuthMethodCreationDateCol, event.CreationDate()),
- handler.NewCol(UserAuthMethodChangeDateCol, event.CreationDate()),
+ handler.NewCol(UserAuthMethodCreationDateCol, event.CreatedAt()),
+ handler.NewCol(UserAuthMethodChangeDateCol, event.CreatedAt()),
handler.NewCol(UserAuthMethodResourceOwnerCol, event.Aggregate().ResourceOwner),
handler.NewCol(UserAuthMethodInstanceIDCol, event.Aggregate().InstanceID),
handler.NewCol(UserAuthMethodUserIDCol, event.Aggregate().ID),
@@ -208,10 +209,10 @@ func (p *userAuthMethodProjection) reduceActivateEvent(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-f92f", "reduce.wrong.event.type %v", []eventstore.EventType{user.HumanPasswordlessTokenAddedType, user.HumanU2FTokenAddedType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(UserAuthMethodChangeDateCol, event.CreationDate()),
+ handler.NewCol(UserAuthMethodChangeDateCol, event.CreatedAt()),
handler.NewCol(UserAuthMethodSequenceCol, event.Sequence()),
handler.NewCol(UserAuthMethodNameCol, name),
handler.NewCol(UserAuthMethodStateCol, domain.MFAStateReady),
@@ -237,12 +238,12 @@ func (p *userAuthMethodProjection) reduceAddAuthMethod(event eventstore.Event) (
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-DS4g3", "reduce.wrong.event.type %v", []eventstore.EventType{user.HumanOTPSMSAddedType, user.HumanOTPEmailAddedType})
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
event,
[]handler.Column{
handler.NewCol(UserAuthMethodTokenIDCol, ""),
- handler.NewCol(UserAuthMethodCreationDateCol, event.CreationDate()),
- handler.NewCol(UserAuthMethodChangeDateCol, event.CreationDate()),
+ handler.NewCol(UserAuthMethodCreationDateCol, event.CreatedAt()),
+ handler.NewCol(UserAuthMethodChangeDateCol, event.CreatedAt()),
handler.NewCol(UserAuthMethodResourceOwnerCol, event.Aggregate().ResourceOwner),
handler.NewCol(UserAuthMethodInstanceIDCol, event.Aggregate().InstanceID),
handler.NewCol(UserAuthMethodUserIDCol, event.Aggregate().ID),
@@ -286,7 +287,7 @@ func (p *userAuthMethodProjection) reduceRemoveAuthMethod(event eventstore.Event
if tokenID != "" {
conditions = append(conditions, handler.NewCond(UserAuthMethodTokenIDCol, tokenID))
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
conditions,
), nil
@@ -298,7 +299,7 @@ func (p *userAuthMethodProjection) reduceOwnerRemoved(event eventstore.Event) (*
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-FwDZ8", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(UserAuthMethodInstanceIDCol, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/user_auth_method_test.go b/internal/query/projection/user_auth_method_test.go
index 6808d62afc..e3d52f253e 100644
--- a/internal/query/projection/user_auth_method_test.go
+++ b/internal/query/projection/user_auth_method_test.go
@@ -6,8 +6,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -26,19 +25,19 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
{
name: "reduceAddedPasswordless",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanPasswordlessTokenAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanPasswordlessTokenAddedType,
+ user.AggregateType,
+ []byte(`{
"webAuthNTokenId": "token-id"
}`),
- ), user.HumanPasswordlessAddedEventMapper),
+ ), user.HumanPasswordlessAddedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceInitAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -63,19 +62,19 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
{
name: "reduceAddedU2F",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanU2FTokenAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanU2FTokenAddedType,
+ user.AggregateType,
+ []byte(`{
"webAuthNTokenId": "token-id"
}`),
- ), user.HumanU2FAddedEventMapper),
+ ), user.HumanU2FAddedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceInitAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -100,18 +99,18 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
{
name: "reduceAddedTOTP",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanMFAOTPAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanMFAOTPAddedType,
+ user.AggregateType,
+ []byte(`{
}`),
- ), user.HumanOTPAddedEventMapper),
+ ), user.HumanOTPAddedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceInitAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -136,20 +135,20 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
{
name: "reduceVerifiedPasswordless",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanPasswordlessTokenVerifiedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanPasswordlessTokenVerifiedType,
+ user.AggregateType,
+ []byte(`{
"webAuthNTokenId": "token-id",
"webAuthNTokenName": "name"
}`),
- ), user.HumanPasswordlessVerifiedEventMapper),
+ ), user.HumanPasswordlessVerifiedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceActivateEvent,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -173,20 +172,20 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
{
name: "reduceVerifiedU2F",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanU2FTokenVerifiedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanU2FTokenVerifiedType,
+ user.AggregateType,
+ []byte(`{
"webAuthNTokenId": "token-id",
"webAuthNTokenName": "name"
}`),
- ), user.HumanU2FVerifiedEventMapper),
+ ), user.HumanU2FVerifiedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceActivateEvent,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -210,18 +209,18 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
{
name: "reduceVerifiedTOTP",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanMFAOTPVerifiedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanMFAOTPVerifiedType,
+ user.AggregateType,
+ []byte(`{
}`),
- ), user.HumanOTPVerifiedEventMapper),
+ ), user.HumanOTPVerifiedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceActivateEvent,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -246,16 +245,15 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceAddedOTPSMS",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanOTPSMSAddedType),
+ user.HumanOTPSMSAddedType,
user.AggregateType,
nil,
), eventstore.GenericEventMapper[user.HumanOTPSMSAddedEvent]),
},
reduce: (&userAuthMethodProjection{}).reduceAddAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -281,16 +279,15 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceAddedOTPEmail",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanOTPEmailAddedType),
+ user.HumanOTPEmailAddedType,
user.AggregateType,
nil,
), eventstore.GenericEventMapper[user.HumanOTPEmailAddedEvent]),
},
reduce: (&userAuthMethodProjection{}).reduceAddAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -316,7 +313,7 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceRemoveOTPPasswordless",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanPasswordlessTokenRemovedType),
+ user.HumanPasswordlessTokenRemovedType,
user.AggregateType,
[]byte(`{
"webAuthNTokenId": "token-id"
@@ -325,9 +322,8 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
},
reduce: (&userAuthMethodProjection{}).reduceRemoveAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -348,7 +344,7 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceRemoveOTPU2F",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanU2FTokenRemovedType),
+ user.HumanU2FTokenRemovedType,
user.AggregateType,
[]byte(`{
"webAuthNTokenId": "token-id"
@@ -357,9 +353,8 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
},
reduce: (&userAuthMethodProjection{}).reduceRemoveAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -380,16 +375,15 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceRemoveTOTP",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanMFAOTPRemovedType),
+ user.HumanMFAOTPRemovedType,
user.AggregateType,
nil,
), user.HumanOTPRemovedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceRemoveAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -409,16 +403,15 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceRemoveOTPSMS",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanOTPSMSRemovedType),
+ user.HumanOTPSMSRemovedType,
user.AggregateType,
nil,
), eventstore.GenericEventMapper[user.HumanOTPSMSRemovedEvent]),
},
reduce: (&userAuthMethodProjection{}).reduceRemoveAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -438,16 +431,15 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceRemovePhone",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanPhoneRemovedType),
+ user.HumanPhoneRemovedType,
user.AggregateType,
nil,
), user.HumanPhoneRemovedEventMapper),
},
reduce: (&userAuthMethodProjection{}).reduceRemoveAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -467,16 +459,15 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "reduceRemoveOTPEmail",
args: args{
event: getEvent(testEvent(
- repository.EventType(user.HumanOTPEmailRemovedType),
+ user.HumanOTPEmailRemovedType,
user.AggregateType,
nil,
), eventstore.GenericEventMapper[user.HumanOTPEmailRemovedEvent]),
},
reduce: (&userAuthMethodProjection{}).reduceRemoveAuthMethod,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -496,16 +487,16 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
name: "org reduceOwnerRemoved",
reduce: (&userAuthMethodProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -522,17 +513,17 @@ func TestUserAuthMethodProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(UserAuthMethodInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/user_grant.go b/internal/query/projection/user_grant.go
index c02187771b..43f8ae8b9f 100644
--- a/internal/query/projection/user_grant.go
+++ b/internal/query/projection/user_grant.go
@@ -8,8 +8,8 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -41,53 +41,55 @@ const (
)
type userGrantProjection struct {
- crdb.StatementHandler
+ es handler.EventStore
}
-func newUserGrantProjection(ctx context.Context, config crdb.StatementHandlerConfig) *userGrantProjection {
- p := new(userGrantProjection)
- config.ProjectionName = UserGrantProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(UserGrantID, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserGrantChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserGrantSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(UserGrantState, crdb.ColumnTypeEnum),
- crdb.NewColumn(UserGrantResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantUserID, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantResourceOwnerUser, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantUserOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(UserGrantProjectID, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantResourceOwnerProject, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantProjectOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(UserGrantGrantID, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantGrantedOrg, crdb.ColumnTypeText),
- crdb.NewColumn(UserGrantGrantedOrgRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
- crdb.NewColumn(UserGrantRoles, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(UserGrantOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func newUserGrantProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, &userGrantProjection{es: config.Eventstore})
+}
+
+func (*userGrantProjection) Name() string {
+ return UserGrantProjectionTable
+}
+
+func (*userGrantProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(UserGrantID, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserGrantChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserGrantSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(UserGrantState, handler.ColumnTypeEnum),
+ handler.NewColumn(UserGrantResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantUserID, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantResourceOwnerUser, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantUserOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(UserGrantProjectID, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantResourceOwnerProject, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantProjectOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(UserGrantGrantID, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantGrantedOrg, handler.ColumnTypeText),
+ handler.NewColumn(UserGrantGrantedOrgRemoved, handler.ColumnTypeBool, handler.Default(false)),
+ handler.NewColumn(UserGrantRoles, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(UserGrantOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(UserGrantInstanceID, UserGrantID),
- crdb.WithIndex(crdb.NewIndex("user_id", []string{UserGrantUserID})),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{UserGrantResourceOwner})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{UserGrantOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("user_owner_removed", []string{UserGrantUserOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("project_owner_removed", []string{UserGrantProjectOwnerRemoved})),
- crdb.WithIndex(crdb.NewIndex("granted_org_removed", []string{UserGrantGrantedOrgRemoved})),
+ handler.NewPrimaryKey(UserGrantInstanceID, UserGrantID),
+ handler.WithIndex(handler.NewIndex("user_id", []string{UserGrantUserID})),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{UserGrantResourceOwner})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{UserGrantOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("user_owner_removed", []string{UserGrantUserOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("project_owner_removed", []string{UserGrantProjectOwnerRemoved})),
+ handler.WithIndex(handler.NewIndex("granted_org_removed", []string{UserGrantGrantedOrgRemoved})),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *userGrantProjection) reducers() []handler.AggregateReducer {
+func (p *userGrantProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: usergrant.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: usergrant.UserGrantAddedType,
Reduce: p.reduceAdded,
@@ -120,7 +122,7 @@ func (p *userGrantProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.UserRemovedType,
Reduce: p.reduceUserRemoved,
@@ -129,7 +131,7 @@ func (p *userGrantProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: project.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: project.ProjectRemovedType,
Reduce: p.reduceProjectRemoved,
@@ -154,7 +156,7 @@ func (p *userGrantProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -163,7 +165,7 @@ func (p *userGrantProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(UserGrantInstanceID),
@@ -180,7 +182,7 @@ func (p *userGrantProjection) reduceAdded(event eventstore.Event) (*handler.Stat
}
ctx := setUserGrantContext(e.Aggregate())
- userOwner, err := getResourceOwnerOfUser(ctx, p.Eventstore, e.Aggregate().InstanceID, e.UserID)
+ userOwner, err := getResourceOwnerOfUser(ctx, p.es, e.Aggregate().InstanceID, e.UserID)
if err != nil {
return nil, err
}
@@ -188,25 +190,25 @@ func (p *userGrantProjection) reduceAdded(event eventstore.Event) (*handler.Stat
projectOwner := ""
grantOwner := ""
if e.ProjectGrantID != "" {
- grantOwner, err = getGrantedOrgOfGrantedProject(ctx, p.Eventstore, e.Aggregate().InstanceID, e.ProjectID, e.ProjectGrantID)
+ grantOwner, err = getGrantedOrgOfGrantedProject(ctx, p.es, e.Aggregate().InstanceID, e.ProjectID, e.ProjectGrantID)
if err != nil {
return nil, err
}
} else {
- projectOwner, err = getResourceOwnerOfProject(ctx, p.Eventstore, e.Aggregate().InstanceID, e.ProjectID)
+ projectOwner, err = getResourceOwnerOfProject(ctx, p.es, e.Aggregate().InstanceID, e.ProjectID)
if err != nil {
return nil, err
}
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(UserGrantID, e.Aggregate().ID),
handler.NewCol(UserGrantResourceOwner, e.Aggregate().ResourceOwner),
handler.NewCol(UserGrantInstanceID, e.Aggregate().InstanceID),
- handler.NewCol(UserGrantCreationDate, e.CreationDate()),
- handler.NewCol(UserGrantChangeDate, e.CreationDate()),
+ handler.NewCol(UserGrantCreationDate, e.CreatedAt()),
+ handler.NewCol(UserGrantChangeDate, e.CreatedAt()),
handler.NewCol(UserGrantSequence, e.Sequence()),
handler.NewCol(UserGrantUserID, e.UserID),
handler.NewCol(UserGrantResourceOwnerUser, userOwner),
@@ -214,14 +216,14 @@ func (p *userGrantProjection) reduceAdded(event eventstore.Event) (*handler.Stat
handler.NewCol(UserGrantResourceOwnerProject, projectOwner),
handler.NewCol(UserGrantGrantID, e.ProjectGrantID),
handler.NewCol(UserGrantGrantedOrg, grantOwner),
- handler.NewCol(UserGrantRoles, database.StringArray(e.RoleKeys)),
+ handler.NewCol(UserGrantRoles, database.TextArray[string](e.RoleKeys)),
handler.NewCol(UserGrantState, domain.UserGrantStateActive),
},
), nil
}
func (p *userGrantProjection) reduceChanged(event eventstore.Event) (*handler.Statement, error) {
- var roles database.StringArray
+ var roles database.TextArray[string]
switch e := event.(type) {
case *usergrant.UserGrantChangedEvent:
@@ -232,10 +234,10 @@ func (p *userGrantProjection) reduceChanged(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-hOr1E", "reduce.wrong.event.type %v", []eventstore.EventType{usergrant.UserGrantChangedType, usergrant.UserGrantCascadeChangedType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(UserGrantChangeDate, event.CreationDate()),
+ handler.NewCol(UserGrantChangeDate, event.CreatedAt()),
handler.NewCol(UserGrantRoles, roles),
handler.NewCol(UserGrantSequence, event.Sequence()),
},
@@ -254,7 +256,7 @@ func (p *userGrantProjection) reduceRemoved(event eventstore.Event) (*handler.St
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-7OBEC", "reduce.wrong.event.type %v", []eventstore.EventType{usergrant.UserGrantRemovedType, usergrant.UserGrantCascadeRemovedType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(UserGrantID, event.Aggregate().ID),
@@ -268,10 +270,10 @@ func (p *userGrantProjection) reduceDeactivated(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-oP7Gm", "reduce.wrong.event.type %s", usergrant.UserGrantDeactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(UserGrantChangeDate, event.CreationDate()),
+ handler.NewCol(UserGrantChangeDate, event.CreatedAt()),
handler.NewCol(UserGrantState, domain.UserGrantStateInactive),
handler.NewCol(UserGrantSequence, event.Sequence()),
},
@@ -287,10 +289,10 @@ func (p *userGrantProjection) reduceReactivated(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-DGsKh", "reduce.wrong.event.type %s", usergrant.UserGrantReactivatedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- handler.NewCol(UserGrantChangeDate, event.CreationDate()),
+ handler.NewCol(UserGrantChangeDate, event.CreatedAt()),
handler.NewCol(UserGrantState, domain.UserGrantStateActive),
handler.NewCol(UserGrantSequence, event.Sequence()),
},
@@ -306,7 +308,7 @@ func (p *userGrantProjection) reduceUserRemoved(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Bner2a", "reduce.wrong.event.type %s", user.UserRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(UserGrantUserID, event.Aggregate().ID),
@@ -320,7 +322,7 @@ func (p *userGrantProjection) reduceProjectRemoved(event eventstore.Event) (*han
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Bne2a", "reduce.wrong.event.type %s", project.ProjectRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(UserGrantProjectID, event.Aggregate().ID),
@@ -335,7 +337,7 @@ func (p *userGrantProjection) reduceProjectGrantRemoved(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-dGr2a", "reduce.wrong.event.type %s", project.GrantRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(UserGrantGrantID, e.GrantID),
@@ -350,10 +352,10 @@ func (p *userGrantProjection) reduceRoleRemoved(event eventstore.Event) (*handle
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-dswg2", "reduce.wrong.event.type %s", project.RoleRemovedType)
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- crdb.NewArrayRemoveCol(UserGrantRoles, e.Key),
+ handler.NewArrayRemoveCol(UserGrantRoles, e.Key),
},
[]handler.Condition{
handler.NewCond(UserGrantProjectID, e.Aggregate().ID),
@@ -364,7 +366,7 @@ func (p *userGrantProjection) reduceRoleRemoved(event eventstore.Event) (*handle
func (p *userGrantProjection) reduceProjectGrantChanged(event eventstore.Event) (*handler.Statement, error) {
var grantID string
- var keys []string
+ var keys database.TextArray[string]
switch e := event.(type) {
case *project.GrantChangedEvent:
grantID = e.GrantID
@@ -376,10 +378,10 @@ func (p *userGrantProjection) reduceProjectGrantChanged(event eventstore.Event)
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-Fh3gw", "reduce.wrong.event.type %v", []eventstore.EventType{project.GrantChangedType, project.GrantCascadeChangedType})
}
- return crdb.NewUpdateStatement(
+ return handler.NewUpdateStatement(
event,
[]handler.Column{
- crdb.NewArrayIntersectCol(UserGrantRoles, database.StringArray(keys)),
+ handler.NewArrayIntersectCol(UserGrantRoles, keys),
},
[]handler.Condition{
handler.NewCond(UserGrantGrantID, grantID),
@@ -394,27 +396,27 @@ func (p *userGrantProjection) reduceOwnerRemoved(event eventstore.Event) (*handl
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-jpIvp", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewMultiStatement(
+ return handler.NewMultiStatement(
e,
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(UserGrantInstanceID, e.Aggregate().InstanceID),
handler.NewCond(UserGrantResourceOwner, e.Aggregate().ID),
},
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(UserGrantInstanceID, e.Aggregate().InstanceID),
handler.NewCond(UserGrantResourceOwnerUser, e.Aggregate().ID),
},
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(UserGrantInstanceID, e.Aggregate().InstanceID),
handler.NewCond(UserGrantResourceOwnerProject, e.Aggregate().ID),
},
),
- crdb.AddDeleteStatement(
+ handler.AddDeleteStatement(
[]handler.Condition{
handler.NewCond(UserGrantInstanceID, e.Aggregate().InstanceID),
handler.NewCond(UserGrantGrantedOrg, e.Aggregate().ID),
@@ -423,10 +425,11 @@ func (p *userGrantProjection) reduceOwnerRemoved(event eventstore.Event) (*handl
), nil
}
-func getResourceOwnerOfUser(ctx context.Context, es *eventstore.Eventstore, instanceID, aggID string) (string, error) {
+func getResourceOwnerOfUser(ctx context.Context, es handler.EventStore, instanceID, aggID string) (string, error) {
events, err := es.Filter(
ctx,
eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
InstanceID(instanceID).
AddQuery().
AggregateTypes(user.AggregateType).
@@ -443,10 +446,11 @@ func getResourceOwnerOfUser(ctx context.Context, es *eventstore.Eventstore, inst
return events[0].Aggregate().ResourceOwner, nil
}
-func getResourceOwnerOfProject(ctx context.Context, es *eventstore.Eventstore, instanceID, aggID string) (string, error) {
+func getResourceOwnerOfProject(ctx context.Context, es handler.EventStore, instanceID, aggID string) (string, error) {
events, err := es.Filter(
ctx,
eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
InstanceID(instanceID).
AddQuery().
AggregateTypes(project.AggregateType).
@@ -463,10 +467,11 @@ func getResourceOwnerOfProject(ctx context.Context, es *eventstore.Eventstore, i
return events[0].Aggregate().ResourceOwner, nil
}
-func getGrantedOrgOfGrantedProject(ctx context.Context, es *eventstore.Eventstore, instanceID, projectID, grantID string) (string, error) {
+func getGrantedOrgOfGrantedProject(ctx context.Context, es handler.EventStore, instanceID, projectID, grantID string) (string, error) {
events, err := es.Filter(
ctx,
eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
InstanceID(instanceID).
AddQuery().
AggregateTypes(project.AggregateType).
@@ -490,6 +495,6 @@ func getGrantedOrgOfGrantedProject(ctx context.Context, es *eventstore.Eventstor
return grantAddedEvent.GrantedOrgID, nil
}
-func setUserGrantContext(event eventstore.Aggregate) context.Context {
- return authz.WithInstanceID(context.Background(), event.InstanceID)
+func setUserGrantContext(aggregate *eventstore.Aggregate) context.Context {
+ return authz.WithInstanceID(context.Background(), aggregate.InstanceID)
}
diff --git a/internal/query/projection/user_grant_test.go b/internal/query/projection/user_grant_test.go
index a2f98f4bb7..97a464e370 100644
--- a/internal/query/projection/user_grant_test.go
+++ b/internal/query/projection/user_grant_test.go
@@ -10,9 +10,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/project"
@@ -33,30 +31,33 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantAddedType),
- usergrant.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantAddedType,
+ usergrant.AggregateType,
+ []byte(`{
"userId": "user-id",
"projectId": "project-id",
"roleKeys": ["role"]
}`),
- ), usergrant.UserGrantAddedEventMapper),
+ ), usergrant.UserGrantAddedEventMapper),
},
reduce: (&userGrantProjection{
- StatementHandler: getStatementHandlerWithFilters(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user-id", "org1").Aggregate,
- "username1",
- "firstname1",
- "lastname1",
- "nickname1",
- "displayname1",
- language.German,
- domain.GenderMale,
- "email1",
- true,
- ),
+ es: newMockEventStore().
+ appendFilterResponse([]eventstore.Event{
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user-id", "org1").Aggregate,
+ "username1",
+ "firstname1",
+ "lastname1",
+ "nickname1",
+ "displayname1",
+ language.German,
+ domain.GenderMale,
+ "email1",
+ true,
+ ),
+ }).appendFilterResponse([]eventstore.Event{
project.NewProjectAddedEvent(context.Background(),
&project.NewAggregate("project-id", "org2").Aggregate,
"project",
@@ -65,11 +66,11 @@ func TestUserGrantProjection_reduces(t *testing.T) {
false,
domain.PrivateLabelingSettingUnspecified,
),
- )(t)}).reduceAdded,
+ }),
+ }).reduceAdded,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -87,7 +88,7 @@ func TestUserGrantProjection_reduces(t *testing.T) {
"org2",
"",
"",
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
domain.UserGrantStateActive,
},
},
@@ -98,42 +99,45 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceAdded with projectgrant",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantAddedType),
- usergrant.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantAddedType,
+ usergrant.AggregateType,
+ []byte(`{
"userId": "user-id",
"projectId": "project-id",
"grantId": "grant-id",
"roleKeys": ["role"]
}`),
- ), usergrant.UserGrantAddedEventMapper),
+ ), usergrant.UserGrantAddedEventMapper),
},
reduce: (&userGrantProjection{
- StatementHandler: getStatementHandlerWithFilters(
- user.NewHumanAddedEvent(context.Background(),
- &user.NewAggregate("user-id", "org1").Aggregate,
- "username1",
- "firstname1",
- "lastname1",
- "nickname1",
- "displayname1",
- language.German,
- domain.GenderMale,
- "email1",
- true,
- ),
+ es: newMockEventStore().
+ appendFilterResponse([]eventstore.Event{
+ user.NewHumanAddedEvent(context.Background(),
+ &user.NewAggregate("user-id", "org1").Aggregate,
+ "username1",
+ "firstname1",
+ "lastname1",
+ "nickname1",
+ "displayname1",
+ language.German,
+ domain.GenderMale,
+ "email1",
+ true,
+ ),
+ }).appendFilterResponse([]eventstore.Event{
project.NewGrantAddedEvent(context.Background(),
&project.NewAggregate("project-id", "org2").Aggregate,
"grant-id",
"org3",
[]string{},
),
- )(t)}).reduceAdded,
+ }),
+ }).reduceAdded,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -151,7 +155,7 @@ func TestUserGrantProjection_reduces(t *testing.T) {
"",
"grant-id",
"org3",
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
domain.UserGrantStateActive,
},
},
@@ -162,26 +166,26 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantChangedType),
- usergrant.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantChangedType,
+ usergrant.AggregateType,
+ []byte(`{
"roleKeys": ["role"]
}`),
- ), usergrant.UserGrantChangedEventMapper),
+ ), usergrant.UserGrantChangedEventMapper),
},
reduce: (&userGrantProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.user_grants3 SET (change_date, roles, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)",
expectedArgs: []interface{}{
anyArg{},
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
uint64(15),
"agg-id",
"instance-id",
@@ -194,26 +198,26 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceCascadeChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantCascadeChangedType),
- usergrant.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantCascadeChangedType,
+ usergrant.AggregateType,
+ []byte(`{
"roleKeys": ["role"]
}`),
- ), usergrant.UserGrantCascadeChangedEventMapper),
+ ), usergrant.UserGrantCascadeChangedEventMapper),
},
reduce: (&userGrantProjection{}).reduceChanged,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.user_grants3 SET (change_date, roles, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)",
expectedArgs: []interface{}{
anyArg{},
- database.StringArray{"role"},
+ database.TextArray[string]{"role"},
uint64(15),
"agg-id",
"instance-id",
@@ -226,17 +230,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantRemovedType),
- usergrant.AggregateType,
- nil,
- ), usergrant.UserGrantRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantRemovedType,
+ usergrant.AggregateType,
+ nil,
+ ), usergrant.UserGrantRemovedEventMapper),
},
reduce: (&userGrantProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -253,17 +257,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(UserGrantInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -279,17 +283,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceCascadeRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantCascadeRemovedType),
- usergrant.AggregateType,
- nil,
- ), usergrant.UserGrantCascadeRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantCascadeRemovedType,
+ usergrant.AggregateType,
+ nil,
+ ), usergrant.UserGrantCascadeRemovedEventMapper),
},
reduce: (&userGrantProjection{}).reduceRemoved,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -306,17 +310,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantDeactivatedType),
- usergrant.AggregateType,
- nil,
- ), usergrant.UserGrantDeactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantDeactivatedType,
+ usergrant.AggregateType,
+ nil,
+ ), usergrant.UserGrantDeactivatedEventMapper),
},
reduce: (&userGrantProjection{}).reduceDeactivated,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -336,17 +340,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(usergrant.UserGrantReactivatedType),
- usergrant.AggregateType,
- nil,
- ), usergrant.UserGrantDeactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ usergrant.UserGrantReactivatedType,
+ usergrant.AggregateType,
+ nil,
+ ), usergrant.UserGrantDeactivatedEventMapper),
},
reduce: (&userGrantProjection{}).reduceReactivated,
want: wantReduce{
- aggregateType: usergrant.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: usergrant.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -366,17 +370,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceUserRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- nil,
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ nil,
+ ), user.UserRemovedEventMapper),
},
reduce: (&userGrantProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -393,17 +397,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.ProjectRemovedType),
- project.AggregateType,
- nil,
- ), project.ProjectRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.ProjectRemovedType,
+ project.AggregateType,
+ nil,
+ ), project.ProjectRemovedEventMapper),
},
reduce: (&userGrantProjection{}).reduceProjectRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -420,17 +424,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantRemovedType),
- project.AggregateType,
- []byte(`{"grantId": "grantID"}`),
- ), project.GrantRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantRemovedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grantID"}`),
+ ), project.GrantRemovedEventMapper),
},
reduce: (&userGrantProjection{}).reduceProjectGrantRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -447,17 +451,17 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceRoleRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.RoleRemovedType),
- project.AggregateType,
- []byte(`{"key": "key"}`),
- ), project.RoleRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.RoleRemovedType,
+ project.AggregateType,
+ []byte(`{"key": "key"}`),
+ ), project.RoleRemovedEventMapper),
},
reduce: (&userGrantProjection{}).reduceRoleRemoved,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -475,23 +479,23 @@ func TestUserGrantProjection_reduces(t *testing.T) {
{
name: "reduceProjectGrantChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(project.GrantChangedType),
- project.AggregateType,
- []byte(`{"grantId": "grantID", "roleKeys": ["key"]}`),
- ), project.GrantChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ project.GrantChangedType,
+ project.AggregateType,
+ []byte(`{"grantId": "grantID", "roleKeys": ["key"]}`),
+ ), project.GrantChangedEventMapper),
},
reduce: (&userGrantProjection{}).reduceProjectGrantChanged,
want: wantReduce{
- aggregateType: project.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: project.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
expectedStmt: "UPDATE projections.user_grants3 SET (roles) = (SELECT ARRAY( SELECT UNNEST(roles) INTERSECT SELECT UNNEST ($1::TEXT[]))) WHERE (grant_id = $2) AND (instance_id = $3)",
expectedArgs: []interface{}{
- database.StringArray{"key"},
+ database.TextArray[string]{"key"},
"grantID",
"instance-id",
},
@@ -504,16 +508,16 @@ func TestUserGrantProjection_reduces(t *testing.T) {
name: "org.reduceOwnerRemoved",
reduce: (&userGrantProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -563,29 +567,3 @@ func TestUserGrantProjection_reduces(t *testing.T) {
})
}
}
-
-func getStatementHandlerWithFilters(events ...eventstore.Command) func(t *testing.T) crdb.StatementHandler {
- filters := make([]expect, 0)
- for _, event := range events {
- filters = append(filters,
- expectFilter(
- eventFromEventPusher(
- event,
- ),
- ),
- )
- }
-
- return func(t *testing.T) crdb.StatementHandler {
- return crdb.StatementHandler{
- ProjectionHandler: &handler.ProjectionHandler{
- Handler: handler.Handler{
- Eventstore: eventstoreExpect(
- t,
- filters...,
- ),
- },
- },
- }
- }
-}
diff --git a/internal/query/projection/user_metadata.go b/internal/query/projection/user_metadata.go
index d1b06e52ef..326860cdf0 100644
--- a/internal/query/projection/user_metadata.go
+++ b/internal/query/projection/user_metadata.go
@@ -5,8 +5,8 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -26,41 +26,41 @@ const (
UserMetadataColumnOwnerRemoved = "owner_removed"
)
-type userMetadataProjection struct {
- crdb.StatementHandler
+type userMetadataProjection struct{}
+
+func newUserMetadataProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(userMetadataProjection))
}
-func newUserMetadataProjection(ctx context.Context, config crdb.StatementHandlerConfig) *userMetadataProjection {
- p := new(userMetadataProjection)
- config.ProjectionName = UserMetadataProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(UserMetadataColumnUserID, crdb.ColumnTypeText),
- crdb.NewColumn(UserMetadataColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserMetadataColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(UserMetadataColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(UserMetadataColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(UserMetadataColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(UserMetadataColumnKey, crdb.ColumnTypeText),
- crdb.NewColumn(UserMetadataColumnValue, crdb.ColumnTypeBytes, crdb.Nullable()),
- crdb.NewColumn(UserMetadataColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*userMetadataProjection) Name() string {
+ return UserMetadataProjectionTable
+}
+
+func (*userMetadataProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(UserMetadataColumnUserID, handler.ColumnTypeText),
+ handler.NewColumn(UserMetadataColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserMetadataColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(UserMetadataColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(UserMetadataColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(UserMetadataColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(UserMetadataColumnKey, handler.ColumnTypeText),
+ handler.NewColumn(UserMetadataColumnValue, handler.ColumnTypeBytes, handler.Nullable()),
+ handler.NewColumn(UserMetadataColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(UserMetadataColumnInstanceID, UserMetadataColumnUserID, UserMetadataColumnKey),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{UserGrantResourceOwner})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{UserMetadataColumnOwnerRemoved})),
+ handler.NewPrimaryKey(UserMetadataColumnInstanceID, UserMetadataColumnUserID, UserMetadataColumnKey),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{UserGrantResourceOwner})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{UserMetadataColumnOwnerRemoved})),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *userMetadataProjection) reducers() []handler.AggregateReducer {
+func (p *userMetadataProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.MetadataSetType,
Reduce: p.reduceMetadataSet,
@@ -81,7 +81,7 @@ func (p *userMetadataProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -90,7 +90,7 @@ func (p *userMetadataProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(UserMetadataColumnInstanceID),
@@ -105,7 +105,7 @@ func (p *userMetadataProjection) reduceMetadataSet(event eventstore.Event) (*han
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Ghn52", "reduce.wrong.event.type %s", user.MetadataSetType)
}
- return crdb.NewUpsertStatement(
+ return handler.NewUpsertStatement(
e,
[]handler.Column{
handler.NewCol(UserMetadataColumnInstanceID, nil),
@@ -130,7 +130,7 @@ func (p *userMetadataProjection) reduceMetadataRemoved(event eventstore.Event) (
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Bm542", "reduce.wrong.event.type %s", user.MetadataRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(UserMetadataColumnUserID, e.Aggregate().ID),
@@ -148,7 +148,7 @@ func (p *userMetadataProjection) reduceMetadataRemovedAll(event eventstore.Event
default:
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Bmnf2", "reduce.wrong.event.type %v", []eventstore.EventType{user.MetadataRemovedAllType, user.UserRemovedType})
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
event,
[]handler.Condition{
handler.NewCond(UserMetadataColumnUserID, event.Aggregate().ID),
@@ -163,7 +163,7 @@ func (p *userMetadataProjection) reduceOwnerRemoved(event eventstore.Event) (*ha
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-oqwul", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(UserMetadataColumnInstanceID, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/user_metadata_test.go b/internal/query/projection/user_metadata_test.go
index 923614c41a..fcf8b26d2f 100644
--- a/internal/query/projection/user_metadata_test.go
+++ b/internal/query/projection/user_metadata_test.go
@@ -5,8 +5,7 @@ import (
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -25,20 +24,20 @@ func TestUserMetadataProjection_reduces(t *testing.T) {
{
name: "reduceMetadataSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MetadataSetType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MetadataSetType,
+ user.AggregateType,
+ []byte(`{
"key": "key",
"value": "dmFsdWU="
}`),
- ), user.MetadataSetEventMapper),
+ ), user.MetadataSetEventMapper),
},
reduce: (&userMetadataProjection{}).reduceMetadataSet,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -61,19 +60,19 @@ func TestUserMetadataProjection_reduces(t *testing.T) {
{
name: "reduceMetadataRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MetadataRemovedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MetadataRemovedType,
+ user.AggregateType,
+ []byte(`{
"key": "key"
}`),
- ), user.MetadataRemovedEventMapper),
+ ), user.MetadataRemovedEventMapper),
},
reduce: (&userMetadataProjection{}).reduceMetadataRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -91,17 +90,17 @@ func TestUserMetadataProjection_reduces(t *testing.T) {
{
name: "reduceMetadataRemovedAll",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MetadataRemovedAllType),
- user.AggregateType,
- nil,
- ), user.MetadataRemovedAllEventMapper),
+ event: getEvent(
+ testEvent(
+ user.MetadataRemovedAllType,
+ user.AggregateType,
+ nil,
+ ), user.MetadataRemovedAllEventMapper),
},
reduce: (&userMetadataProjection{}).reduceMetadataRemovedAll,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -118,17 +117,17 @@ func TestUserMetadataProjection_reduces(t *testing.T) {
{
name: "reduceMetadataRemovedAll (user removed)",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- nil,
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ nil,
+ ), user.UserRemovedEventMapper),
},
reduce: (&userMetadataProjection{}).reduceMetadataRemovedAll,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -146,16 +145,16 @@ func TestUserMetadataProjection_reduces(t *testing.T) {
name: "org reduceOwnerRemoved",
reduce: (&userMetadataProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -172,17 +171,17 @@ func TestUserMetadataProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(UserMetadataColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/user_personal_access_token.go b/internal/query/projection/user_personal_access_token.go
index 7ab5e494bd..2c072d3bd8 100644
--- a/internal/query/projection/user_personal_access_token.go
+++ b/internal/query/projection/user_personal_access_token.go
@@ -6,8 +6,8 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/handler/crdb"
+ old_handler "github.com/zitadel/zitadel/internal/eventstore/handler"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -28,43 +28,43 @@ const (
PersonalAccessTokenColumnOwnerRemoved = "owner_removed"
)
-type personalAccessTokenProjection struct {
- crdb.StatementHandler
+type personalAccessTokenProjection struct{}
+
+func newPersonalAccessTokenProjection(ctx context.Context, config handler.Config) *handler.Handler {
+ return handler.NewHandler(ctx, &config, new(personalAccessTokenProjection))
}
-func newPersonalAccessTokenProjection(ctx context.Context, config crdb.StatementHandlerConfig) *personalAccessTokenProjection {
- p := new(personalAccessTokenProjection)
- config.ProjectionName = PersonalAccessTokenProjectionTable
- config.Reducers = p.reducers()
- config.InitCheck = crdb.NewTableCheck(
- crdb.NewTable([]*crdb.Column{
- crdb.NewColumn(PersonalAccessTokenColumnID, crdb.ColumnTypeText),
- crdb.NewColumn(PersonalAccessTokenColumnCreationDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(PersonalAccessTokenColumnChangeDate, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(PersonalAccessTokenColumnSequence, crdb.ColumnTypeInt64),
- crdb.NewColumn(PersonalAccessTokenColumnResourceOwner, crdb.ColumnTypeText),
- crdb.NewColumn(PersonalAccessTokenColumnInstanceID, crdb.ColumnTypeText),
- crdb.NewColumn(PersonalAccessTokenColumnUserID, crdb.ColumnTypeText),
- crdb.NewColumn(PersonalAccessTokenColumnExpiration, crdb.ColumnTypeTimestamp),
- crdb.NewColumn(PersonalAccessTokenColumnScopes, crdb.ColumnTypeTextArray, crdb.Nullable()),
- crdb.NewColumn(PersonalAccessTokenColumnOwnerRemoved, crdb.ColumnTypeBool, crdb.Default(false)),
+func (*personalAccessTokenProjection) Name() string {
+ return PersonalAccessTokenProjectionTable
+}
+
+func (*personalAccessTokenProjection) Init() *old_handler.Check {
+ return handler.NewTableCheck(
+ handler.NewTable([]*handler.InitColumn{
+ handler.NewColumn(PersonalAccessTokenColumnID, handler.ColumnTypeText),
+ handler.NewColumn(PersonalAccessTokenColumnCreationDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(PersonalAccessTokenColumnChangeDate, handler.ColumnTypeTimestamp),
+ handler.NewColumn(PersonalAccessTokenColumnSequence, handler.ColumnTypeInt64),
+ handler.NewColumn(PersonalAccessTokenColumnResourceOwner, handler.ColumnTypeText),
+ handler.NewColumn(PersonalAccessTokenColumnInstanceID, handler.ColumnTypeText),
+ handler.NewColumn(PersonalAccessTokenColumnUserID, handler.ColumnTypeText),
+ handler.NewColumn(PersonalAccessTokenColumnExpiration, handler.ColumnTypeTimestamp),
+ handler.NewColumn(PersonalAccessTokenColumnScopes, handler.ColumnTypeTextArray, handler.Nullable()),
+ handler.NewColumn(PersonalAccessTokenColumnOwnerRemoved, handler.ColumnTypeBool, handler.Default(false)),
},
- crdb.NewPrimaryKey(PersonalAccessTokenColumnInstanceID, PersonalAccessTokenColumnID),
- crdb.WithIndex(crdb.NewIndex("user_id", []string{PersonalAccessTokenColumnUserID})),
- crdb.WithIndex(crdb.NewIndex("resource_owner", []string{PersonalAccessTokenColumnResourceOwner})),
- crdb.WithIndex(crdb.NewIndex("owner_removed", []string{PersonalAccessTokenColumnOwnerRemoved})),
+ handler.NewPrimaryKey(PersonalAccessTokenColumnInstanceID, PersonalAccessTokenColumnID),
+ handler.WithIndex(handler.NewIndex("user_id", []string{PersonalAccessTokenColumnUserID})),
+ handler.WithIndex(handler.NewIndex("resource_owner", []string{PersonalAccessTokenColumnResourceOwner})),
+ handler.WithIndex(handler.NewIndex("owner_removed", []string{PersonalAccessTokenColumnOwnerRemoved})),
),
)
-
- p.StatementHandler = crdb.NewStatementHandler(ctx, config)
- return p
}
-func (p *personalAccessTokenProjection) reducers() []handler.AggregateReducer {
+func (p *personalAccessTokenProjection) Reducers() []handler.AggregateReducer {
return []handler.AggregateReducer{
{
Aggregate: user.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: user.PersonalAccessTokenAddedType,
Reduce: p.reducePersonalAccessTokenAdded,
@@ -81,7 +81,7 @@ func (p *personalAccessTokenProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: org.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: org.OrgRemovedEventType,
Reduce: p.reduceOwnerRemoved,
@@ -90,7 +90,7 @@ func (p *personalAccessTokenProjection) reducers() []handler.AggregateReducer {
},
{
Aggregate: instance.AggregateType,
- EventRedusers: []handler.EventReducer{
+ EventReducers: []handler.EventReducer{
{
Event: instance.InstanceRemovedEventType,
Reduce: reduceInstanceRemovedHelper(PersonalAccessTokenColumnInstanceID),
@@ -105,7 +105,7 @@ func (p *personalAccessTokenProjection) reducePersonalAccessTokenAdded(event eve
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-DVgf7", "reduce.wrong.event.type %s", user.PersonalAccessTokenAddedType)
}
- return crdb.NewCreateStatement(
+ return handler.NewCreateStatement(
e,
[]handler.Column{
handler.NewCol(PersonalAccessTokenColumnID, e.TokenID),
@@ -116,7 +116,7 @@ func (p *personalAccessTokenProjection) reducePersonalAccessTokenAdded(event eve
handler.NewCol(PersonalAccessTokenColumnSequence, e.Sequence()),
handler.NewCol(PersonalAccessTokenColumnUserID, e.Aggregate().ID),
handler.NewCol(PersonalAccessTokenColumnExpiration, e.Expiration),
- handler.NewCol(PersonalAccessTokenColumnScopes, database.StringArray(e.Scopes)),
+ handler.NewCol(PersonalAccessTokenColumnScopes, database.TextArray[string](e.Scopes)),
},
), nil
}
@@ -126,7 +126,7 @@ func (p *personalAccessTokenProjection) reducePersonalAccessTokenRemoved(event e
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-g7u3F", "reduce.wrong.event.type %s", user.PersonalAccessTokenRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(PersonalAccessTokenColumnID, e.TokenID),
@@ -140,7 +140,7 @@ func (p *personalAccessTokenProjection) reduceUserRemoved(event eventstore.Event
if !ok {
return nil, errors.ThrowInvalidArgumentf(nil, "HANDL-Dff3h", "reduce.wrong.event.type %s", user.UserRemovedType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(PersonalAccessTokenColumnUserID, e.Aggregate().ID),
@@ -155,7 +155,7 @@ func (p *personalAccessTokenProjection) reduceOwnerRemoved(event eventstore.Even
return nil, errors.ThrowInvalidArgumentf(nil, "PROJE-zQVhl", "reduce.wrong.event.type %s", org.OrgRemovedEventType)
}
- return crdb.NewDeleteStatement(
+ return handler.NewDeleteStatement(
e,
[]handler.Condition{
handler.NewCond(PersonalAccessTokenColumnInstanceID, e.Aggregate().InstanceID),
diff --git a/internal/query/projection/user_personal_access_token_test.go b/internal/query/projection/user_personal_access_token_test.go
index a07229d71e..4cb7e3162a 100644
--- a/internal/query/projection/user_personal_access_token_test.go
+++ b/internal/query/projection/user_personal_access_token_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -27,17 +26,17 @@ func TestPersonalAccessTokenProjection_reduces(t *testing.T) {
{
name: "reducePersonalAccessTokenAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.PersonalAccessTokenAddedType),
- user.AggregateType,
- []byte(`{"tokenId": "tokenID", "expiration": "9999-12-31T23:59:59Z", "scopes": ["openid"]}`),
- ), user.PersonalAccessTokenAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.PersonalAccessTokenAddedType,
+ user.AggregateType,
+ []byte(`{"tokenId": "tokenID", "expiration": "9999-12-31T23:59:59Z", "scopes": ["openid"]}`),
+ ), user.PersonalAccessTokenAddedEventMapper),
},
reduce: (&personalAccessTokenProjection{}).reducePersonalAccessTokenAdded,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -51,7 +50,7 @@ func TestPersonalAccessTokenProjection_reduces(t *testing.T) {
uint64(15),
"agg-id",
time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- database.StringArray{"openid"},
+ database.TextArray[string]{"openid"},
},
},
},
@@ -61,17 +60,17 @@ func TestPersonalAccessTokenProjection_reduces(t *testing.T) {
{
name: "reducePersonalAccessTokenRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.PersonalAccessTokenRemovedType),
- user.AggregateType,
- []byte(`{"tokenId": "tokenID"}`),
- ), user.PersonalAccessTokenRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.PersonalAccessTokenRemovedType,
+ user.AggregateType,
+ []byte(`{"tokenId": "tokenID"}`),
+ ), user.PersonalAccessTokenRemovedEventMapper),
},
reduce: (&personalAccessTokenProjection{}).reducePersonalAccessTokenRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -88,17 +87,17 @@ func TestPersonalAccessTokenProjection_reduces(t *testing.T) {
{
name: "reduceUserRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.PersonalAccessTokenRemovedType),
- user.AggregateType,
- nil,
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.PersonalAccessTokenRemovedType,
+ user.AggregateType,
+ nil,
+ ), user.UserRemovedEventMapper),
},
reduce: (&personalAccessTokenProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: eventstore.AggregateType("user"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("user"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -116,16 +115,16 @@ func TestPersonalAccessTokenProjection_reduces(t *testing.T) {
name: "org reduceOwnerRemoved",
reduce: (&personalAccessTokenProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -142,17 +141,17 @@ func TestPersonalAccessTokenProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(PersonalAccessTokenColumnInstanceID),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/projection/user_test.go b/internal/query/projection/user_test.go
index 7651e75d5c..66b4f65942 100644
--- a/internal/query/projection/user_test.go
+++ b/internal/query/projection/user_test.go
@@ -7,8 +7,7 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/handler"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/repository/instance"
"github.com/zitadel/zitadel/internal/repository/org"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -27,10 +26,11 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanAddedType,
+ user.AggregateType,
+ []byte(`{
"username": "user-name",
"firstName": "first-name",
"lastName": "last-name",
@@ -41,13 +41,12 @@ func TestUserProjection_reduces(t *testing.T) {
"email": "email@zitadel.com",
"phone": "+41 00 000 00 00"
}`),
- ), user.HumanAddedEventMapper),
+ ), user.HumanAddedEventMapper),
},
reduce: (&userProjection{}).reduceHumanAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -96,10 +95,11 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1Added",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1AddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserV1AddedType,
+ user.AggregateType,
+ []byte(`{
"username": "user-name",
"firstName": "first-name",
"lastName": "last-name",
@@ -110,13 +110,12 @@ func TestUserProjection_reduces(t *testing.T) {
"email": "email@zitadel.com",
"phone": "+41 00 000 00 00"
}`),
- ), user.HumanAddedEventMapper),
+ ), user.HumanAddedEventMapper),
},
reduce: (&userProjection{}).reduceHumanAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -165,22 +164,22 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanAdded NULLs",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanAddedType,
+ user.AggregateType,
+ []byte(`{
"username": "user-name",
"firstName": "first-name",
"lastName": "last-name",
"email": "email@zitadel.com"
}`),
- ), user.HumanAddedEventMapper),
+ ), user.HumanAddedEventMapper),
},
reduce: (&userProjection{}).reduceHumanAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -229,10 +228,11 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanRegistered",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanRegisteredType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanRegisteredType,
+ user.AggregateType,
+ []byte(`{
"username": "user-name",
"firstName": "first-name",
"lastName": "last-name",
@@ -243,13 +243,12 @@ func TestUserProjection_reduces(t *testing.T) {
"email": "email@zitadel.com",
"phone": "+41 00 000 00 00"
}`),
- ), user.HumanRegisteredEventMapper),
+ ), user.HumanRegisteredEventMapper),
},
reduce: (&userProjection{}).reduceHumanRegistered,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -298,10 +297,11 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1Registered",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1RegisteredType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserV1RegisteredType,
+ user.AggregateType,
+ []byte(`{
"username": "user-name",
"firstName": "first-name",
"lastName": "last-name",
@@ -312,13 +312,12 @@ func TestUserProjection_reduces(t *testing.T) {
"email": "email@zitadel.com",
"phone": "+41 00 000 00 00"
}`),
- ), user.HumanRegisteredEventMapper),
+ ), user.HumanRegisteredEventMapper),
},
reduce: (&userProjection{}).reduceHumanRegistered,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -367,22 +366,22 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanRegistered NULLs",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanRegisteredType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanRegisteredType,
+ user.AggregateType,
+ []byte(`{
"username": "user-name",
"firstName": "first-name",
"lastName": "last-name",
"email": "email@zitadel.com"
}`),
- ), user.HumanRegisteredEventMapper),
+ ), user.HumanRegisteredEventMapper),
},
reduce: (&userProjection{}).reduceHumanRegistered,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -431,17 +430,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanInitCodeAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanInitialCodeAddedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanInitialCodeAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.HumanInitialCodeAddedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanInitialCodeAddedEventMapper),
},
reduce: (&userProjection{}).reduceHumanInitCodeAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -459,17 +458,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1InitCodeAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1InitialCodeAddedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanInitialCodeAddedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserV1InitialCodeAddedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanInitialCodeAddedEventMapper),
},
reduce: (&userProjection{}).reduceHumanInitCodeAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -487,17 +486,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanInitCodeSucceeded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanInitializedCheckSucceededType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanInitializedCheckSucceededEventMapper),
+ event: getEvent(
+ testEvent(
+ user.HumanInitializedCheckSucceededType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanInitializedCheckSucceededEventMapper),
},
reduce: (&userProjection{}).reduceHumanInitCodeSucceeded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -515,17 +514,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1InitCodeAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1InitializedCheckSucceededType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanInitializedCheckSucceededEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserV1InitializedCheckSucceededType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanInitializedCheckSucceededEventMapper),
},
reduce: (&userProjection{}).reduceHumanInitCodeSucceeded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -543,17 +542,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserLocked",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserLockedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserLockedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserLockedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserLockedEventMapper),
},
reduce: (&userProjection{}).reduceUserLocked,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -573,17 +572,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserUnlocked",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserUnlockedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserUnlockedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserUnlockedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserUnlockedEventMapper),
},
reduce: (&userProjection{}).reduceUserUnlocked,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -603,17 +602,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserDeactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserDeactivatedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserDeactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserDeactivatedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserDeactivatedEventMapper),
},
reduce: (&userProjection{}).reduceUserDeactivated,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -633,17 +632,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserReactivated",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserReactivatedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserReactivatedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserReactivatedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserReactivatedEventMapper),
},
reduce: (&userProjection{}).reduceUserReactivated,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -663,17 +662,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.UserRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.UserRemovedEventMapper),
},
reduce: (&userProjection{}).reduceUserRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -690,19 +689,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserUserNameChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserUserNameChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserUserNameChangedType,
+ user.AggregateType,
+ []byte(`{
"username": "username"
}`),
- ), user.UsernameChangedEventMapper),
+ ), user.UsernameChangedEventMapper),
},
reduce: (&userProjection{}).reduceUserNameChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -722,19 +721,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceDomainClaimed",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserDomainClaimedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserDomainClaimedType,
+ user.AggregateType,
+ []byte(`{
"username": "id@temporary.domain"
}`),
- ), user.DomainClaimedEventMapper),
+ ), user.DomainClaimedEventMapper),
},
reduce: (&userProjection{}).reduceDomainClaimed,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -754,10 +753,11 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanProfileChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanProfileChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanProfileChangedType,
+ user.AggregateType,
+ []byte(`{
"firstName": "first-name",
"lastName": "last-name",
"nickName": "nick-name",
@@ -765,13 +765,12 @@ func TestUserProjection_reduces(t *testing.T) {
"preferredLanguage": "ch-DE",
"gender": 3
}`),
- ), user.HumanProfileChangedEventMapper),
+ ), user.HumanProfileChangedEventMapper),
},
reduce: (&userProjection{}).reduceHumanProfileChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -803,10 +802,11 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1ProfileChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1ProfileChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserV1ProfileChangedType,
+ user.AggregateType,
+ []byte(`{
"firstName": "first-name",
"lastName": "last-name",
"nickName": "nick-name",
@@ -814,13 +814,12 @@ func TestUserProjection_reduces(t *testing.T) {
"preferredLanguage": "ch-DE",
"gender": 3
}`),
- ), user.HumanProfileChangedEventMapper),
+ ), user.HumanProfileChangedEventMapper),
},
reduce: (&userProjection{}).reduceHumanProfileChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -852,19 +851,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanPhoneChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanPhoneChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanPhoneChangedType,
+ user.AggregateType,
+ []byte(`{
"phone": "+41 00 000 00 00"
}`),
- ), user.HumanPhoneChangedEventMapper),
+ ), user.HumanPhoneChangedEventMapper),
},
reduce: (&userProjection{}).reduceHumanPhoneChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -900,19 +899,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1PhoneChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1PhoneChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserV1PhoneChangedType,
+ user.AggregateType,
+ []byte(`{
"phone": "+41 00 000 00 00"
}`),
- ), user.HumanPhoneChangedEventMapper),
+ ), user.HumanPhoneChangedEventMapper),
},
reduce: (&userProjection{}).reduceHumanPhoneChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -948,17 +947,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanPhoneRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanPhoneRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanPhoneRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.HumanPhoneRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanPhoneRemovedEventMapper),
},
reduce: (&userProjection{}).reduceHumanPhoneRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -995,17 +994,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1PhoneRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1PhoneRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanPhoneRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserV1PhoneRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanPhoneRemovedEventMapper),
},
reduce: (&userProjection{}).reduceHumanPhoneRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1042,17 +1041,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanPhoneVerified",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanPhoneVerifiedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanPhoneVerifiedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.HumanPhoneVerifiedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanPhoneVerifiedEventMapper),
},
reduce: (&userProjection{}).reduceHumanPhoneVerified,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1086,17 +1085,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1PhoneVerified",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1PhoneVerifiedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanPhoneVerifiedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserV1PhoneVerifiedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanPhoneVerifiedEventMapper),
},
reduce: (&userProjection{}).reduceHumanPhoneVerified,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1130,19 +1129,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanEmailChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanEmailChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanEmailChangedType,
+ user.AggregateType,
+ []byte(`{
"email": "email@zitadel.com"
}`),
- ), user.HumanEmailChangedEventMapper),
+ ), user.HumanEmailChangedEventMapper),
},
reduce: (&userProjection{}).reduceHumanEmailChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1178,19 +1177,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1EmailChanged",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1EmailChangedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.UserV1EmailChangedType,
+ user.AggregateType,
+ []byte(`{
"email": "email@zitadel.com"
}`),
- ), user.HumanEmailChangedEventMapper),
+ ), user.HumanEmailChangedEventMapper),
},
reduce: (&userProjection{}).reduceHumanEmailChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1226,17 +1225,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanEmailVerified",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanEmailVerifiedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanEmailVerifiedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.HumanEmailVerifiedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanEmailVerifiedEventMapper),
},
reduce: (&userProjection{}).reduceHumanEmailVerified,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1270,17 +1269,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceUserV1EmailVerified",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.UserV1EmailVerifiedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanEmailVerifiedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.UserV1EmailVerifiedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanEmailVerifiedEventMapper),
},
reduce: (&userProjection{}).reduceHumanEmailVerified,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1314,19 +1313,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanAvatarAdded",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanAvatarAddedType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.HumanAvatarAddedType,
+ user.AggregateType,
+ []byte(`{
"storeKey": "users/agg-id/avatar"
}`),
- ), user.HumanAvatarAddedEventMapper),
+ ), user.HumanAvatarAddedEventMapper),
},
reduce: (&userProjection{}).reduceHumanAvatarAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1353,17 +1352,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceHumanAvatarRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.HumanAvatarRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.HumanAvatarRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.HumanAvatarRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.HumanAvatarRemovedEventMapper),
},
reduce: (&userProjection{}).reduceHumanAvatarRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1390,20 +1389,20 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineAddedEvent no description",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineAddedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MachineAddedEventType,
+ user.AggregateType,
+ []byte(`{
"username": "username",
"name": "machine-name"
}`),
- ), user.MachineAddedEventMapper),
+ ), user.MachineAddedEventMapper),
},
reduce: (&userProjection{}).reduceMachineAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1437,21 +1436,21 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineAddedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineAddedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MachineAddedEventType,
+ user.AggregateType,
+ []byte(`{
"username": "username",
"name": "machine-name",
"description": "description"
}`),
- ), user.MachineAddedEventMapper),
+ ), user.MachineAddedEventMapper),
},
reduce: (&userProjection{}).reduceMachineAdded,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1485,20 +1484,20 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineChangedEvent",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineChangedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MachineChangedEventType,
+ user.AggregateType,
+ []byte(`{
"name": "machine-name",
"description": "description"
}`),
- ), user.MachineChangedEventMapper),
+ ), user.MachineChangedEventMapper),
},
reduce: (&userProjection{}).reduceMachineChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1526,19 +1525,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineChangedEvent name",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineChangedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MachineChangedEventType,
+ user.AggregateType,
+ []byte(`{
"name": "machine-name"
}`),
- ), user.MachineChangedEventMapper),
+ ), user.MachineChangedEventMapper),
},
reduce: (&userProjection{}).reduceMachineChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1565,19 +1564,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineChangedEvent description",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineChangedEventType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MachineChangedEventType,
+ user.AggregateType,
+ []byte(`{
"description": "description"
}`),
- ), user.MachineChangedEventMapper),
+ ), user.MachineChangedEventMapper),
},
reduce: (&userProjection{}).reduceMachineChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1604,17 +1603,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineChangedEvent no values",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineChangedEventType),
- user.AggregateType,
- []byte(`{}`),
- ), user.MachineChangedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.MachineChangedEventType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.MachineChangedEventMapper),
},
reduce: (&userProjection{}).reduceMachineChanged,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{},
},
@@ -1623,19 +1622,19 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineSecretSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineSecretSetType),
- user.AggregateType,
- []byte(`{
+ event: getEvent(
+ testEvent(
+ user.MachineSecretSetType,
+ user.AggregateType,
+ []byte(`{
"client_secret": {}
}`),
- ), user.MachineSecretSetEventMapper),
+ ), user.MachineSecretSetEventMapper),
},
reduce: (&userProjection{}).reduceMachineSecretSet,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1662,17 +1661,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "reduceMachineSecretSet",
args: args{
- event: getEvent(testEvent(
- repository.EventType(user.MachineSecretRemovedType),
- user.AggregateType,
- []byte(`{}`),
- ), user.MachineSecretRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ user.MachineSecretRemovedType,
+ user.AggregateType,
+ []byte(`{}`),
+ ), user.MachineSecretRemovedEventMapper),
},
reduce: (&userProjection{}).reduceMachineSecretRemoved,
want: wantReduce{
- aggregateType: user.AggregateType,
- sequence: 15,
- previousSequence: 10,
+ aggregateType: user.AggregateType,
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1700,16 +1699,16 @@ func TestUserProjection_reduces(t *testing.T) {
name: "org reduceOwnerRemoved",
reduce: (&userProjection{}).reduceOwnerRemoved,
args: args{
- event: getEvent(testEvent(
- repository.EventType(org.OrgRemovedEventType),
- org.AggregateType,
- nil,
- ), org.OrgRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ org.OrgRemovedEventType,
+ org.AggregateType,
+ nil,
+ ), org.OrgRemovedEventMapper),
},
want: wantReduce{
- aggregateType: eventstore.AggregateType("org"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("org"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
@@ -1726,17 +1725,17 @@ func TestUserProjection_reduces(t *testing.T) {
{
name: "instance reduceInstanceRemoved",
args: args{
- event: getEvent(testEvent(
- repository.EventType(instance.InstanceRemovedEventType),
- instance.AggregateType,
- nil,
- ), instance.InstanceRemovedEventMapper),
+ event: getEvent(
+ testEvent(
+ instance.InstanceRemovedEventType,
+ instance.AggregateType,
+ nil,
+ ), instance.InstanceRemovedEventMapper),
},
reduce: reduceInstanceRemovedHelper(UserInstanceIDCol),
want: wantReduce{
- aggregateType: eventstore.AggregateType("instance"),
- sequence: 15,
- previousSequence: 10,
+ aggregateType: eventstore.AggregateType("instance"),
+ sequence: 15,
executer: &testExecuter{
executions: []execution{
{
diff --git a/internal/query/query.go b/internal/query/query.go
index 216426c430..2265183e1a 100644
--- a/internal/query/query.go
+++ b/internal/query/query.go
@@ -12,6 +12,7 @@ import (
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/api/authz"
+ internal_authz "github.com/zitadel/zitadel/internal/api/authz"
sd "github.com/zitadel/zitadel/internal/config/systemdefaults"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/database"
@@ -61,6 +62,7 @@ func StartQueries(
zitadelRoles []authz.RoleMapping,
sessionTokenVerifier func(ctx context.Context, sessionToken string, sessionID string, tokenID string) (err error),
permissionCheck func(q *Queries) domain.PermissionCheck,
+ systemAPIUsers map[string]*internal_authz.SystemAPIUser,
) (repo *Queries, err error) {
statikLoginFS, err := fs.NewWithNamespace("login")
if err != nil {
@@ -106,11 +108,11 @@ func StartQueries(
repo.checkPermission = permissionCheck(repo)
- err = projection.Create(ctx, sqlClient, es, projections, keyEncryptionAlgorithm, certEncryptionAlgorithm)
+ err = projection.Create(ctx, sqlClient, es, projections, keyEncryptionAlgorithm, certEncryptionAlgorithm, systemAPIUsers)
if err != nil {
return nil, err
}
- projection.Start()
+ projection.Start(ctx)
return repo, nil
}
diff --git a/internal/query/search_query.go b/internal/query/search_query.go
index 63dd6739fc..ce9d31238f 100644
--- a/internal/query/search_query.go
+++ b/internal/query/search_query.go
@@ -11,7 +11,7 @@ import (
type SearchResponse struct {
Count uint64
- *LatestSequence
+ *State
}
type SearchRequest struct {
@@ -43,6 +43,7 @@ func (req *SearchRequest) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
type SearchQuery interface {
toQuery(sq.SelectBuilder) sq.SelectBuilder
comp() sq.Sqlizer
+ Col() Column
}
type NotNullQuery struct {
@@ -66,6 +67,10 @@ func (q *NotNullQuery) comp() sq.Sqlizer {
return sq.NotEq{q.Column.identifier(): nil}
}
+func (q *NotNullQuery) Col() Column {
+ return q.Column
+}
+
type IsNullQuery struct {
Column Column
}
@@ -87,6 +92,10 @@ func (q *IsNullQuery) comp() sq.Sqlizer {
return sq.Eq{q.Column.identifier(): nil}
}
+func (q *IsNullQuery) Col() Column {
+ return q.Column
+}
+
type orQuery struct {
queries []SearchQuery
}
@@ -110,6 +119,10 @@ func (q *orQuery) comp() sq.Sqlizer {
return or
}
+func (q *orQuery) Col() Column {
+ return Column{}
+}
+
type ColumnComparisonQuery struct {
Column1 Column
Compare ColumnComparison
@@ -137,6 +150,10 @@ func (q *ColumnComparisonQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder
return query.Where(q.comp())
}
+func (q *ColumnComparisonQuery) Col() Column {
+ return Column{}
+}
+
func (s *ColumnComparisonQuery) comp() sq.Sqlizer {
switch s.Compare {
case ColumnEquals:
@@ -160,19 +177,10 @@ type InTextQuery struct {
Column Column
Values []string
}
-type TextQuery struct {
- Column Column
- Text string
- Compare TextComparison
-}
-var (
- ErrNothingSelected = errors.New("nothing selected")
- ErrInvalidCompare = errors.New("invalid compare")
- ErrMissingColumn = errors.New("missing column")
- ErrInvalidNumber = errors.New("value is no number")
- ErrEmptyValues = errors.New("values array must not be empty")
-)
+func (q *InTextQuery) Col() Column {
+ return q.Column
+}
func NewInTextQuery(col Column, values []string) (*InTextQuery, error) {
if len(values) == 0 {
@@ -187,6 +195,20 @@ func NewInTextQuery(col Column, values []string) (*InTextQuery, error) {
}, nil
}
+type TextQuery struct {
+ Column Column
+ Text string
+ Compare TextComparison
+}
+
+var (
+ ErrNothingSelected = errors.New("nothing selected")
+ ErrInvalidCompare = errors.New("invalid compare")
+ ErrMissingColumn = errors.New("missing column")
+ ErrInvalidNumber = errors.New("value is no number")
+ ErrEmptyValues = errors.New("values array must not be empty")
+)
+
func NewTextQuery(col Column, value string, compare TextComparison) (*TextQuery, error) {
if compare < 0 || compare >= textCompareMax {
return nil, ErrInvalidCompare
@@ -201,6 +223,10 @@ func NewTextQuery(col Column, value string, compare TextComparison) (*TextQuery,
}, nil
}
+func (q *TextQuery) Col() Column {
+ return q.Column
+}
+
func (q *InTextQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
return query.Where(q.comp())
}
@@ -311,6 +337,10 @@ func (q *NumberQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
return query.Where(q.comp())
}
+func (q *NumberQuery) Col() Column {
+ return q.Column
+}
+
func (s *NumberQuery) comp() sq.Sqlizer {
switch s.Compare {
case NumberEquals:
@@ -427,6 +457,10 @@ func (s *ListQuery) comp() sq.Sqlizer {
return nil
}
+func (q *ListQuery) Col() Column {
+ return q.Column
+}
+
type ListComparison int
const (
@@ -466,6 +500,10 @@ func (q *or) comp() sq.Sqlizer {
return sq.Or(queries)
}
+func (q *or) Col() Column {
+ return Column{}
+}
+
type BoolQuery struct {
Column Column
Value bool
@@ -478,6 +516,10 @@ func NewBoolQuery(c Column, value bool) (*BoolQuery, error) {
}, nil
}
+func (q *BoolQuery) Col() Column {
+ return q.Column
+}
+
func (q *BoolQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
return query.Where(q.comp())
}
diff --git a/internal/query/secret_generators.go b/internal/query/secret_generators.go
index 35c9ccbd81..f339668a25 100644
--- a/internal/query/secret_generators.go
+++ b/internal/query/secret_generators.go
@@ -174,7 +174,7 @@ func (q *Queries) SearchSecretGenerators(ctx context.Context, queries *SecretGen
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-4miii", "Errors.Internal")
}
- secretGenerators.LatestSequence, err = q.latestSequence(ctx, secretGeneratorsTable)
+ secretGenerators.State, err = q.latestState(ctx, secretGeneratorsTable)
return secretGenerators, err
}
diff --git a/internal/query/security_policy.go b/internal/query/security_policy.go
index 5a1b23dfb5..49f355a458 100644
--- a/internal/query/security_policy.go
+++ b/internal/query/security_policy.go
@@ -54,7 +54,7 @@ type SecurityPolicy struct {
Sequence uint64
Enabled bool
- AllowedOrigins database.StringArray
+ AllowedOrigins database.TextArray[string]
}
func (q *Queries) SecurityPolicy(ctx context.Context) (policy *SecurityPolicy, err error) {
diff --git a/internal/query/session.go b/internal/query/session.go
index c098d3d110..bcc87a3031 100644
--- a/internal/query/session.go
+++ b/internal/query/session.go
@@ -8,11 +8,14 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -170,7 +173,8 @@ func (q *Queries) SessionByID(ctx context.Context, shouldTriggerBulk bool, id, s
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.SessionProjection.Trigger(ctx)
+ ctx, err = projection.SessionProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("unable to trigger")
}
query, scan := prepareSessionQuery(ctx, q.client)
@@ -222,7 +226,7 @@ func (q *Queries) SearchSessions(ctx context.Context, queries *SessionsSearchQue
return nil, errors.ThrowInternal(err, "QUERY-Sfg42", "Errors.Internal")
}
- sessions.LatestSequence, err = q.latestSequence(ctx, sessionsTable)
+ sessions.State, err = q.latestState(ctx, sessionsTable)
return sessions, err
}
diff --git a/internal/query/sms.go b/internal/query/sms.go
index 956328b64a..898f34a4d1 100644
--- a/internal/query/sms.go
+++ b/internal/query/sms.go
@@ -181,7 +181,7 @@ func (q *Queries) SearchSMSConfigs(ctx context.Context, queries *SMSConfigsSearc
if err != nil {
return nil, errors.ThrowInternal(err, "QUERY-aJnZL", "Errors.Internal")
}
- configs.LatestSequence, err = q.latestSequence(ctx, smsConfigsTable)
+ configs.State, err = q.latestState(ctx, smsConfigsTable)
return configs, err
}
diff --git a/internal/query/user.go b/internal/query/user.go
index 9b421bdc92..ea71a7d477 100644
--- a/internal/query/user.go
+++ b/internal/query/user.go
@@ -5,9 +5,11 @@ import (
"database/sql"
errs "errors"
"strings"
+ "sync"
"time"
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/api/authz"
@@ -15,6 +17,7 @@ import (
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -33,7 +36,7 @@ type User struct {
State domain.UserState
Type domain.UserType
Username string
- LoginNames database.StringArray
+ LoginNames database.TextArray[string]
PreferredLoginName string
Human *Human
Machine *Machine
@@ -104,7 +107,7 @@ type NotifyUser struct {
State domain.UserState
Type domain.UserType
Username string
- LoginNames database.StringArray
+ LoginNames database.TextArray[string]
PreferredLoginName string
FirstName string
LastName string
@@ -338,8 +341,7 @@ func (q *Queries) GetUserByID(ctx context.Context, shouldTriggerBulk bool, userI
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.UserProjection.Trigger(ctx)
- ctx = projection.LoginNameProjection.Trigger(ctx)
+ triggerUserProjections(ctx)
}
query, scan := prepareUserQuery(ctx, q.client)
@@ -370,8 +372,7 @@ func (q *Queries) GetUser(ctx context.Context, shouldTriggerBulk bool, withOwner
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.UserProjection.Trigger(ctx)
- ctx = projection.LoginNameProjection.Trigger(ctx)
+ triggerUserProjections(ctx)
}
query, scan := prepareUserQuery(ctx, q.client)
@@ -482,8 +483,7 @@ func (q *Queries) GetNotifyUserByID(ctx context.Context, shouldTriggered bool, u
defer func() { span.EndWithError(err) }()
if shouldTriggered {
- ctx = projection.UserProjection.Trigger(ctx)
- ctx = projection.LoginNameProjection.Trigger(ctx)
+ triggerUserProjections(ctx)
}
query, scan := prepareNotifyUserQuery(ctx, q.client)
@@ -514,8 +514,7 @@ func (q *Queries) GetNotifyUser(ctx context.Context, shouldTriggered bool, withO
defer func() { span.EndWithError(err) }()
if shouldTriggered {
- ctx = projection.UserProjection.Trigger(ctx)
- ctx = projection.LoginNameProjection.Trigger(ctx)
+ triggerUserProjections(ctx)
}
query, scan := prepareNotifyUserQuery(ctx, q.client)
@@ -563,7 +562,7 @@ func (q *Queries) SearchUsers(ctx context.Context, queries *UserSearchQueries, w
return nil, errors.ThrowInternal(err, "QUERY-AG4gs", "Errors.Internal")
}
- users.LatestSequence, err = q.latestSequence(ctx, userTable)
+ users.State, err = q.latestState(ctx, userTable)
return users, err
}
@@ -718,6 +717,22 @@ func NewUserLoginNameExistsQuery(value string, comparison TextComparison) (Searc
)
}
+func triggerUserProjections(ctx context.Context) {
+ wg := sync.WaitGroup{}
+ wg.Add(2)
+ func() {
+ _, err := projection.UserProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
+ wg.Done()
+ }()
+ func() {
+ _, err := projection.LoginNameProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
+ wg.Done()
+ }()
+ wg.Wait()
+}
+
func prepareLoginNamesQuery() (string, []interface{}, error) {
return sq.Select(
userLoginNamesUserIDCol.identifier(),
@@ -1104,7 +1119,7 @@ func prepareNotifyUserQuery(ctx context.Context, db prepareDatabase) (sq.SelectB
func(row *sql.Row) (*NotifyUser, error) {
u := new(NotifyUser)
var count int
- loginNames := database.StringArray{}
+ loginNames := database.TextArray[string]{}
preferredLoginName := sql.NullString{}
humanID := sql.NullString{}
@@ -1277,7 +1292,7 @@ func prepareUsersQuery(ctx context.Context, db prepareDatabase) (sq.SelectBuilde
var count uint64
for rows.Next() {
u := new(User)
- loginNames := database.StringArray{}
+ loginNames := database.TextArray[string]{}
preferredLoginName := sql.NullString{}
humanID := sql.NullString{}
diff --git a/internal/query/user_auth_method.go b/internal/query/user_auth_method.go
index 0881c253c6..9568179775 100644
--- a/internal/query/user_auth_method.go
+++ b/internal/query/user_auth_method.go
@@ -137,7 +137,7 @@ func (q *Queries) SearchUserAuthMethods(ctx context.Context, queries *UserAuthMe
if err != nil {
return nil, err
}
- userAuthMethods.LatestSequence, err = q.latestSequence(ctx, userAuthMethodTable)
+ userAuthMethods.State, err = q.latestState(ctx, userAuthMethodTable)
return userAuthMethods, err
}
@@ -171,7 +171,7 @@ func (q *Queries) ListActiveUserAuthMethodTypes(ctx context.Context, userID stri
if err != nil {
return nil, err
}
- userAuthMethodTypes.LatestSequence, err = q.latestSequence(ctx, userTable, notifyTable, userAuthMethodTable, idpUserLinkTable)
+ userAuthMethodTypes.State, err = q.latestState(ctx, userTable, notifyTable, userAuthMethodTable, idpUserLinkTable)
return userAuthMethodTypes, err
}
diff --git a/internal/query/user_grant.go b/internal/query/user_grant.go
index 9643b3d93a..da36b0ef8c 100644
--- a/internal/query/user_grant.go
+++ b/internal/query/user_grant.go
@@ -8,11 +8,14 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -23,7 +26,7 @@ type UserGrant struct {
CreationDate time.Time
ChangeDate time.Time
Sequence uint64
- Roles database.StringArray
+ Roles database.TextArray[string]
// GrantID represents the project grant id
GrantID string
State domain.UserGrantState
@@ -237,7 +240,8 @@ func (q *Queries) UserGrant(ctx context.Context, shouldTriggerBulk bool, withOwn
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.UserGrantProjection.Trigger(ctx)
+ ctx, err = projection.UserGrantProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
query, scan := prepareUserGrantQuery(ctx, q.client)
@@ -265,7 +269,8 @@ func (q *Queries) UserGrants(ctx context.Context, queries *UserGrantsQueries, sh
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.UserGrantProjection.Trigger(ctx)
+ ctx, err = projection.UserGrantProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("unable to trigger")
}
query, scan := prepareUserGrantsQuery(ctx, q.client)
@@ -278,7 +283,7 @@ func (q *Queries) UserGrants(ctx context.Context, queries *UserGrantsQueries, sh
return nil, errors.ThrowInternal(err, "QUERY-wXnQR", "Errors.Query.SQLStatement")
}
- latestSequence, err := q.latestSequence(ctx, userGrantTable)
+ latestSequence, err := q.latestState(ctx, userGrantTable)
if err != nil {
return nil, err
}
@@ -291,7 +296,7 @@ func (q *Queries) UserGrants(ctx context.Context, queries *UserGrantsQueries, sh
return nil, err
}
- grants.LatestSequence = latestSequence
+ grants.State = latestSequence
return grants, nil
}
diff --git a/internal/query/user_grant_test.go b/internal/query/user_grant_test.go
index bcbd70b4c6..918003f615 100644
--- a/internal/query/user_grant_test.go
+++ b/internal/query/user_grant_test.go
@@ -149,7 +149,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -174,7 +174,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -207,7 +207,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -232,7 +232,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -265,7 +265,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -290,7 +290,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -323,7 +323,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -348,7 +348,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -381,7 +381,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -406,7 +406,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -469,7 +469,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -500,7 +500,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -536,7 +536,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -567,7 +567,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -603,7 +603,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -634,7 +634,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -670,7 +670,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -701,7 +701,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -737,7 +737,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -768,7 +768,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -804,7 +804,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -828,7 +828,7 @@ func Test_UserGrantPrepares(t *testing.T) {
testNow,
20211111,
"grant-id",
- database.StringArray{"role-key"},
+ database.TextArray[string]{"role-key"},
domain.UserGrantStateActive,
"user-id",
"username",
@@ -859,7 +859,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
@@ -883,7 +883,7 @@ func Test_UserGrantPrepares(t *testing.T) {
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211111,
- Roles: database.StringArray{"role-key"},
+ Roles: database.TextArray[string]{"role-key"},
GrantID: "grant-id",
State: domain.UserGrantStateActive,
UserID: "user-id",
diff --git a/internal/query/user_membership.go b/internal/query/user_membership.go
index f2eae22a02..96d1139834 100644
--- a/internal/query/user_membership.go
+++ b/internal/query/user_membership.go
@@ -3,6 +3,7 @@ package query
import (
"context"
"database/sql"
+ "sync"
"time"
sq "github.com/Masterminds/squirrel"
@@ -11,6 +12,7 @@ import (
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -22,7 +24,7 @@ type Memberships struct {
type Membership struct {
UserID string
- Roles database.StringArray
+ Roles database.TextArray[string]
CreationDate time.Time
ChangeDate time.Time
Sequence uint64
@@ -105,17 +107,48 @@ func (q *MembershipSearchQuery) toQuery(query sq.SelectBuilder) sq.SelectBuilder
return query
}
-func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuery, withOwnerRemoved bool) (memberships *Memberships, err error) {
+func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuery, withOwnerRemoved, shouldTrigger bool) (memberships *Memberships, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
- query, queryArgs, scan := prepareMembershipsQuery(ctx, q.client, withOwnerRemoved)
+ if shouldTrigger {
+ wg := sync.WaitGroup{}
+ wg.Add(4)
+ go func() {
+ spanCtx, triggerSpan := tracing.NewNamedSpan(ctx, "TriggerOrgMemberProjection")
+ _, _ = projection.OrgMemberProjection.Trigger(spanCtx, handler.WithAwaitRunning())
+ triggerSpan.End()
+ wg.Done()
+ }()
+ go func() {
+ spanCtx, triggerSpan := tracing.NewNamedSpan(ctx, "TriggerInstanceMemberProjection")
+ _, _ = projection.InstanceMemberProjection.Trigger(spanCtx, handler.WithAwaitRunning())
+ triggerSpan.End()
+ wg.Done()
+ }()
+ go func() {
+ spanCtx, triggerSpan := tracing.NewNamedSpan(ctx, "TriggerProjectMemberProjection")
+ _, _ = projection.ProjectMemberProjection.Trigger(spanCtx, handler.WithAwaitRunning())
+ triggerSpan.End()
+ wg.Done()
+ }()
+ go func() {
+ spanCtx, triggerSpan := tracing.NewNamedSpan(ctx, "TriggerProjectGrantMemberProjection")
+ _, _ = projection.ProjectGrantMemberProjection.Trigger(spanCtx, handler.WithAwaitRunning())
+ triggerSpan.End()
+ wg.Done()
+ }()
+
+ wg.Wait()
+ }
+
+ query, queryArgs, scan := prepareMembershipsQuery(ctx, q.client, withOwnerRemoved, queries)
eq := sq.Eq{membershipInstanceID.identifier(): authz.GetInstance(ctx).InstanceID()}
stmt, args, err := queries.toQuery(query).Where(eq).ToSql()
if err != nil {
return nil, errors.ThrowInvalidArgument(err, "QUERY-T84X9", "Errors.Query.InvalidRequest")
}
- latestSequence, err := q.latestSequence(ctx, orgMemberTable, instanceMemberTable, projectMemberTable, projectGrantMemberTable)
+ latestSequence, err := q.latestState(ctx, orgMemberTable, instanceMemberTable, projectMemberTable, projectGrantMemberTable)
if err != nil {
return nil, err
}
@@ -128,14 +161,14 @@ func (q *Queries) Memberships(ctx context.Context, queries *MembershipSearchQuer
if err != nil {
return nil, err
}
- memberships.LatestSequence = latestSequence
+ memberships.State = latestSequence
return memberships, nil
}
var (
//membershipAlias is a hack to satisfy checks in the queries
membershipAlias = table{
- name: "memberships",
+ name: "members",
instanceIDCol: projection.MemberInstanceID,
}
membershipUserID = Column{
@@ -201,11 +234,11 @@ var (
}
)
-func getMembershipFromQuery(withOwnerRemoved bool) (string, []interface{}) {
- orgMembers, orgMembersArgs := prepareOrgMember(withOwnerRemoved)
- iamMembers, iamMembersArgs := prepareIAMMember(withOwnerRemoved)
- projectMembers, projectMembersArgs := prepareProjectMember(withOwnerRemoved)
- projectGrantMembers, projectGrantMembersArgs := prepareProjectGrantMember(withOwnerRemoved)
+func getMembershipFromQuery(withOwnerRemoved bool, queries *MembershipSearchQuery) (string, []interface{}) {
+ orgMembers, orgMembersArgs := prepareOrgMember(withOwnerRemoved, queries)
+ iamMembers, iamMembersArgs := prepareIAMMember(withOwnerRemoved, queries)
+ projectMembers, projectMembersArgs := prepareProjectMember(withOwnerRemoved, queries)
+ projectGrantMembers, projectGrantMembersArgs := prepareProjectGrantMember(withOwnerRemoved, queries)
args := make([]interface{}, 0)
args = append(append(append(append(args, orgMembersArgs...), iamMembersArgs...), projectMembersArgs...), projectGrantMembersArgs...)
@@ -221,8 +254,8 @@ func getMembershipFromQuery(withOwnerRemoved bool) (string, []interface{}) {
args
}
-func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerRemoved bool) (sq.SelectBuilder, []interface{}, func(*sql.Rows) (*Memberships, error)) {
- query, args := getMembershipFromQuery(withOwnerRemoved)
+func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerRemoved bool, queries *MembershipSearchQuery) (sq.SelectBuilder, []interface{}, func(*sql.Rows) (*Memberships, error)) {
+ query, args := getMembershipFromQuery(withOwnerRemoved, queries)
return sq.Select(
membershipUserID.identifier(),
membershipRoles.identifier(),
@@ -237,11 +270,13 @@ func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerR
ProjectGrantColumnGrantedOrgID.identifier(),
ProjectColumnName.identifier(),
OrgColumnName.identifier(),
+ InstanceColumnName.identifier(),
countColumn.identifier(),
).From(query).
LeftJoin(join(ProjectColumnID, membershipProjectID)).
LeftJoin(join(OrgColumnID, membershipOrgID)).
- LeftJoin(join(ProjectGrantColumnGrantID, membershipGrantID) + db.Timetravel(call.Took(ctx))).
+ LeftJoin(join(ProjectGrantColumnGrantID, membershipGrantID)).
+ LeftJoin(join(InstanceColumnID, membershipInstanceID) + db.Timetravel(call.Took(ctx))).
PlaceholderFormat(sq.Dollar),
args,
func(rows *sql.Rows) (*Memberships, error) {
@@ -252,12 +287,13 @@ func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerR
var (
membership = new(Membership)
orgID = sql.NullString{}
- iamID = sql.NullString{}
+ instanceID = sql.NullString{}
projectID = sql.NullString{}
grantID = sql.NullString{}
grantedOrgID = sql.NullString{}
projectName = sql.NullString{}
orgName = sql.NullString{}
+ instanceName = sql.NullString{}
)
err := rows.Scan(
@@ -268,12 +304,13 @@ func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerR
&membership.Sequence,
&membership.ResourceOwner,
&orgID,
- &iamID,
+ &instanceID,
&projectID,
&grantID,
&grantedOrgID,
&projectName,
&orgName,
+ &instanceName,
&count,
)
@@ -286,10 +323,10 @@ func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerR
OrgID: orgID.String,
Name: orgName.String,
}
- } else if iamID.Valid {
+ } else if instanceID.Valid {
membership.IAM = &IAMMembership{
- IAMID: iamID.String,
- Name: iamID.String,
+ IAMID: instanceID.String,
+ Name: instanceName.String,
}
} else if projectID.Valid && grantID.Valid && grantedOrgID.Valid {
membership.ProjectGrant = &ProjectGrantMembership{
@@ -321,7 +358,7 @@ func prepareMembershipsQuery(ctx context.Context, db prepareDatabase, withOwnerR
}
}
-func prepareOrgMember(withOwnerRemoved bool) (string, []interface{}) {
+func prepareOrgMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
OrgMemberUserID.identifier(),
OrgMemberRoles.identifier(),
@@ -335,15 +372,23 @@ func prepareOrgMember(withOwnerRemoved bool) (string, []interface{}) {
"NULL::TEXT AS "+membershipProjectID.name,
"NULL::TEXT AS "+membershipGrantID.name,
).From(orgMemberTable.identifier())
+
+ for _, q := range query.Queries {
+ if q.Col().table.name == membershipAlias.name {
+ builder = q.toQuery(builder)
+ }
+ }
+
if !withOwnerRemoved {
eq := sq.Eq{}
addOrgMemberWithoutOwnerRemoved(eq)
builder = builder.Where(eq)
}
+
return builder.MustSql()
}
-func prepareIAMMember(withOwnerRemoved bool) (string, []interface{}) {
+func prepareIAMMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
InstanceMemberUserID.identifier(),
InstanceMemberRoles.identifier(),
@@ -357,6 +402,13 @@ func prepareIAMMember(withOwnerRemoved bool) (string, []interface{}) {
"NULL::TEXT AS "+membershipProjectID.name,
"NULL::TEXT AS "+membershipGrantID.name,
).From(instanceMemberTable.identifier())
+
+ for _, q := range query.Queries {
+ if q.Col().table.name == membershipAlias.name {
+ builder = q.toQuery(builder)
+ }
+ }
+
if !withOwnerRemoved {
eq := sq.Eq{}
addIamMemberWithoutOwnerRemoved(eq)
@@ -365,7 +417,7 @@ func prepareIAMMember(withOwnerRemoved bool) (string, []interface{}) {
return builder.MustSql()
}
-func prepareProjectMember(withOwnerRemoved bool) (string, []interface{}) {
+func prepareProjectMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
ProjectMemberUserID.identifier(),
ProjectMemberRoles.identifier(),
@@ -379,6 +431,13 @@ func prepareProjectMember(withOwnerRemoved bool) (string, []interface{}) {
ProjectMemberProjectID.identifier(),
"NULL::TEXT AS "+membershipGrantID.name,
).From(projectMemberTable.identifier())
+
+ for _, q := range query.Queries {
+ if q.Col().table.name == membershipAlias.name {
+ builder = q.toQuery(builder)
+ }
+ }
+
if !withOwnerRemoved {
eq := sq.Eq{}
addProjectMemberWithoutOwnerRemoved(eq)
@@ -387,7 +446,7 @@ func prepareProjectMember(withOwnerRemoved bool) (string, []interface{}) {
return builder.MustSql()
}
-func prepareProjectGrantMember(withOwnerRemoved bool) (string, []interface{}) {
+func prepareProjectGrantMember(withOwnerRemoved bool, query *MembershipSearchQuery) (string, []interface{}) {
builder := sq.Select(
ProjectGrantMemberUserID.identifier(),
ProjectGrantMemberRoles.identifier(),
@@ -401,6 +460,13 @@ func prepareProjectGrantMember(withOwnerRemoved bool) (string, []interface{}) {
ProjectGrantMemberProjectID.identifier(),
ProjectGrantMemberGrantID.identifier(),
).From(projectGrantMemberTable.identifier())
+
+ for _, q := range query.Queries {
+ if q.Col().table.name == membershipAlias.name {
+ builder = q.toQuery(builder)
+ }
+ }
+
if !withOwnerRemoved {
eq := sq.Eq{}
addProjectGrantMemberWithoutOwnerRemoved(eq)
diff --git a/internal/query/user_membership_test.go b/internal/query/user_membership_test.go
index 108f5d8601..c2453eda1f 100644
--- a/internal/query/user_membership_test.go
+++ b/internal/query/user_membership_test.go
@@ -16,19 +16,20 @@ import (
var (
membershipsStmt = regexp.QuoteMeta(
- "SELECT memberships.user_id" +
- ", memberships.roles" +
- ", memberships.creation_date" +
- ", memberships.change_date" +
- ", memberships.sequence" +
- ", memberships.resource_owner" +
- ", memberships.org_id" +
- ", memberships.id" +
- ", memberships.project_id" +
- ", memberships.grant_id" +
+ "SELECT members.user_id" +
+ ", members.roles" +
+ ", members.creation_date" +
+ ", members.change_date" +
+ ", members.sequence" +
+ ", members.resource_owner" +
+ ", members.org_id" +
+ ", members.id" +
+ ", members.project_id" +
+ ", members.grant_id" +
", projections.project_grants3.granted_org_id" +
", projections.projects3.name" +
", projections.orgs1.name" +
+ ", projections.instances.name" +
", COUNT(*) OVER ()" +
" FROM (" +
"SELECT members.user_id" +
@@ -86,10 +87,11 @@ var (
", members.grant_id" +
" FROM projections.project_grant_members3 AS members" +
" WHERE members.granted_org_removed = $7 AND members.owner_removed = $8 AND members.user_owner_removed = $9" +
- ") AS memberships" +
- " LEFT JOIN projections.projects3 ON memberships.project_id = projections.projects3.id AND memberships.instance_id = projections.projects3.instance_id" +
- " LEFT JOIN projections.orgs1 ON memberships.org_id = projections.orgs1.id AND memberships.instance_id = projections.orgs1.instance_id" +
- " LEFT JOIN projections.project_grants3 ON memberships.grant_id = projections.project_grants3.grant_id AND memberships.instance_id = projections.project_grants3.instance_id" +
+ ") AS members" +
+ " LEFT JOIN projections.projects3 ON members.project_id = projections.projects3.id AND members.instance_id = projections.projects3.instance_id" +
+ " LEFT JOIN projections.orgs1 ON members.org_id = projections.orgs1.id AND members.instance_id = projections.orgs1.instance_id" +
+ " LEFT JOIN projections.project_grants3 ON members.grant_id = projections.project_grants3.grant_id AND members.instance_id = projections.project_grants3.instance_id" +
+ " LEFT JOIN projections.instances ON members.instance_id = projections.instances.id" +
` AS OF SYSTEM TIME '-1 ms'`)
membershipCols = []string{
"user_id",
@@ -105,6 +107,7 @@ var (
"granted_org_id",
"name", //project name
"name", //org name
+ "name", // instance name
"count",
}
)
@@ -142,7 +145,7 @@ func Test_MembershipPrepares(t *testing.T) {
[][]driver.Value{
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -154,6 +157,7 @@ func Test_MembershipPrepares(t *testing.T) {
nil,
nil,
"org-name",
+ nil,
},
},
),
@@ -165,7 +169,7 @@ func Test_MembershipPrepares(t *testing.T) {
Memberships: []*Membership{
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
@@ -185,7 +189,7 @@ func Test_MembershipPrepares(t *testing.T) {
[][]driver.Value{
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -197,6 +201,7 @@ func Test_MembershipPrepares(t *testing.T) {
nil,
nil,
nil,
+ "instance",
},
},
),
@@ -208,12 +213,12 @@ func Test_MembershipPrepares(t *testing.T) {
Memberships: []*Membership{
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
ResourceOwner: "ro",
- IAM: &IAMMembership{IAMID: "iam-id", Name: "iam-id"},
+ IAM: &IAMMembership{IAMID: "iam-id", Name: "instance"},
},
},
},
@@ -228,7 +233,7 @@ func Test_MembershipPrepares(t *testing.T) {
[][]driver.Value{
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -240,6 +245,7 @@ func Test_MembershipPrepares(t *testing.T) {
nil,
"project-name",
nil,
+ nil,
},
},
),
@@ -251,7 +257,7 @@ func Test_MembershipPrepares(t *testing.T) {
Memberships: []*Membership{
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
@@ -271,7 +277,7 @@ func Test_MembershipPrepares(t *testing.T) {
[][]driver.Value{
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -283,6 +289,7 @@ func Test_MembershipPrepares(t *testing.T) {
"granted-org-id",
"project-name",
nil,
+ nil,
},
},
),
@@ -294,7 +301,7 @@ func Test_MembershipPrepares(t *testing.T) {
Memberships: []*Membership{
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
@@ -319,7 +326,7 @@ func Test_MembershipPrepares(t *testing.T) {
[][]driver.Value{
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -331,10 +338,11 @@ func Test_MembershipPrepares(t *testing.T) {
nil,
nil,
"org-name",
+ nil,
},
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -346,10 +354,11 @@ func Test_MembershipPrepares(t *testing.T) {
nil,
nil,
nil,
+ "instance",
},
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -361,10 +370,11 @@ func Test_MembershipPrepares(t *testing.T) {
nil,
"project-name",
nil,
+ nil,
},
{
"user-id",
- database.StringArray{"role1", "role2"},
+ database.TextArray[string]{"role1", "role2"},
testNow,
testNow,
uint64(20211202),
@@ -376,6 +386,7 @@ func Test_MembershipPrepares(t *testing.T) {
"granted-org-id",
"project-name",
nil,
+ nil,
},
},
),
@@ -387,7 +398,7 @@ func Test_MembershipPrepares(t *testing.T) {
Memberships: []*Membership{
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
@@ -396,16 +407,16 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
ResourceOwner: "ro",
- IAM: &IAMMembership{IAMID: "iam-id", Name: "iam-id"},
+ IAM: &IAMMembership{IAMID: "iam-id", Name: "instance"},
},
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
@@ -414,7 +425,7 @@ func Test_MembershipPrepares(t *testing.T) {
},
{
UserID: "user-id",
- Roles: database.StringArray{"role1", "role2"},
+ Roles: database.TextArray[string]{"role1", "role2"},
CreationDate: testNow,
ChangeDate: testNow,
Sequence: 20211202,
@@ -456,7 +467,7 @@ func Test_MembershipPrepares(t *testing.T) {
func prepareMembershipWrapper(withOwnerRemoved bool) func(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Rows) (*Memberships, error)) {
return func(ctx context.Context, db prepareDatabase) (sq.SelectBuilder, func(*sql.Rows) (*Memberships, error)) {
- builder, _, fun := prepareMembershipsQuery(ctx, db, withOwnerRemoved)
+ builder, _, fun := prepareMembershipsQuery(ctx, db, withOwnerRemoved, &MembershipSearchQuery{})
return builder, fun
}
}
diff --git a/internal/query/user_metadata.go b/internal/query/user_metadata.go
index 6a2be6a7e4..6ee99735dd 100644
--- a/internal/query/user_metadata.go
+++ b/internal/query/user_metadata.go
@@ -8,9 +8,12 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -82,7 +85,8 @@ func (q *Queries) GetUserMetadataByKey(ctx context.Context, shouldTriggerBulk bo
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.UserMetadataProjection.Trigger(ctx)
+ ctx, err = projection.UserMetadataProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
query, scan := prepareUserMetadataQuery(ctx, q.client)
@@ -114,7 +118,8 @@ func (q *Queries) SearchUserMetadata(ctx context.Context, shouldTriggerBulk bool
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.UserMetadataProjection.Trigger(ctx)
+ ctx, err = projection.UserMetadataProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
query, scan := prepareUserMetadataListQuery(ctx, q.client)
@@ -137,7 +142,7 @@ func (q *Queries) SearchUserMetadata(ctx context.Context, shouldTriggerBulk bool
if err != nil {
return nil, err
}
- metadata.LatestSequence, err = q.latestSequence(ctx, userMetadataTable)
+ metadata.State, err = q.latestState(ctx, userMetadataTable)
return metadata, err
}
diff --git a/internal/query/user_otp.go b/internal/query/user_otp.go
index 955b7c924e..77e5e16fd9 100644
--- a/internal/query/user_otp.go
+++ b/internal/query/user_otp.go
@@ -80,6 +80,7 @@ func (wm *HumanOTPReadModel) Reduce() error {
func (wm *HumanOTPReadModel) Query() *eventstore.SearchQueryBuilder {
query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
AddQuery().
AggregateTypes(user.AggregateType).
AggregateIDs(wm.AggregateID).
diff --git a/internal/query/user_password.go b/internal/query/user_password.go
index 9d8ab71405..0e9da8a5e5 100644
--- a/internal/query/user_password.go
+++ b/internal/query/user_password.go
@@ -113,6 +113,7 @@ func (wm *HumanPasswordReadModel) Reduce() error {
func (wm *HumanPasswordReadModel) Query() *eventstore.SearchQueryBuilder {
query := eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
AllowTimeTravel().
AddQuery().
AggregateTypes(user.AggregateType).
diff --git a/internal/query/user_personal_access_token.go b/internal/query/user_personal_access_token.go
index 1024fae5be..e0a1fc90e8 100644
--- a/internal/query/user_personal_access_token.go
+++ b/internal/query/user_personal_access_token.go
@@ -8,10 +8,13 @@ import (
sq "github.com/Masterminds/squirrel"
+ "github.com/zitadel/logging"
+
"github.com/zitadel/zitadel/internal/api/authz"
"github.com/zitadel/zitadel/internal/api/call"
"github.com/zitadel/zitadel/internal/database"
"github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing"
)
@@ -77,7 +80,7 @@ type PersonalAccessToken struct {
UserID string
Expiration time.Time
- Scopes database.StringArray
+ Scopes database.TextArray[string]
}
type PersonalAccessTokenSearchQueries struct {
@@ -90,7 +93,8 @@ func (q *Queries) PersonalAccessTokenByID(ctx context.Context, shouldTriggerBulk
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
- ctx = projection.PersonalAccessTokenProjection.Trigger(ctx)
+ ctx, err = projection.PersonalAccessTokenProjection.Trigger(ctx, handler.WithAwaitRunning())
+ logging.OnError(err).Debug("trigger failed")
}
query, scan := preparePersonalAccessTokenQuery(ctx, q.client)
@@ -144,7 +148,7 @@ func (q *Queries) SearchPersonalAccessTokens(ctx context.Context, queries *Perso
return nil, errors.ThrowInternal(err, "QUERY-Bmz63", "Errors.Internal")
}
- personalAccessTokens.LatestSequence, err = q.latestSequence(ctx, personalAccessTokensTable)
+ personalAccessTokens.State, err = q.latestState(ctx, personalAccessTokensTable)
return personalAccessTokens, err
}
@@ -199,7 +203,7 @@ func preparePersonalAccessTokenQuery(ctx context.Context, db prepareDatabase) (s
)
if err != nil {
if errs.Is(err, sql.ErrNoRows) {
- return nil, errors.ThrowNotFound(err, "QUERY-fk2fs", "Errors.PersonalAccessToken.NotFound")
+ return nil, errors.ThrowNotFound(err, "QUERY-fRunu", "Errors.PersonalAccessToken.NotFound")
}
return nil, errors.ThrowInternal(err, "QUERY-dj2FF", "Errors.Internal")
}
diff --git a/internal/query/user_personal_access_token_test.go b/internal/query/user_personal_access_token_test.go
index c12a151ed2..95b08c87c9 100644
--- a/internal/query/user_personal_access_token_test.go
+++ b/internal/query/user_personal_access_token_test.go
@@ -104,7 +104,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
uint64(20211202),
"user-id",
time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- database.StringArray{"openid"},
+ database.TextArray[string]{"openid"},
},
),
},
@@ -116,7 +116,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
Sequence: 20211202,
UserID: "user-id",
Expiration: time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- Scopes: database.StringArray{"openid"},
+ Scopes: database.TextArray[string]{"openid"},
},
},
{
@@ -164,7 +164,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
uint64(20211202),
"user-id",
time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- database.StringArray{"openid"},
+ database.TextArray[string]{"openid"},
},
},
),
@@ -182,7 +182,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
Sequence: 20211202,
UserID: "user-id",
Expiration: time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- Scopes: database.StringArray{"openid"},
+ Scopes: database.TextArray[string]{"openid"},
},
},
},
@@ -203,7 +203,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
uint64(20211202),
"user-id",
time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- database.StringArray{"openid"},
+ database.TextArray[string]{"openid"},
},
{
"token-id2",
@@ -213,7 +213,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
uint64(20211202),
"user-id",
time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- database.StringArray{"openid"},
+ database.TextArray[string]{"openid"},
},
},
),
@@ -231,7 +231,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
Sequence: 20211202,
UserID: "user-id",
Expiration: time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- Scopes: database.StringArray{"openid"},
+ Scopes: database.TextArray[string]{"openid"},
},
{
ID: "token-id2",
@@ -241,7 +241,7 @@ func Test_PersonalAccessTokenPrepares(t *testing.T) {
Sequence: 20211202,
UserID: "user-id",
Expiration: time.Date(9999, 12, 31, 23, 59, 59, 0, time.UTC),
- Scopes: database.StringArray{"openid"},
+ Scopes: database.TextArray[string]{"openid"},
},
},
},
diff --git a/internal/query/user_test.go b/internal/query/user_test.go
index 986d3c1e9c..866cab0cad 100644
--- a/internal/query/user_test.go
+++ b/internal/query/user_test.go
@@ -363,7 +363,7 @@ func Test_UserPrepares(t *testing.T) {
domain.UserStateActive,
domain.UserTypeHuman,
"username",
- database.StringArray{"login_name1", "login_name2"},
+ database.TextArray[string]{"login_name1", "login_name2"},
"login_name1",
//human
"id",
@@ -397,7 +397,7 @@ func Test_UserPrepares(t *testing.T) {
State: domain.UserStateActive,
Type: domain.UserTypeHuman,
Username: "username",
- LoginNames: database.StringArray{"login_name1", "login_name2"},
+ LoginNames: database.TextArray[string]{"login_name1", "login_name2"},
PreferredLoginName: "login_name1",
Human: &Human{
FirstName: "first_name",
@@ -430,7 +430,7 @@ func Test_UserPrepares(t *testing.T) {
domain.UserStateActive,
domain.UserTypeMachine,
"username",
- database.StringArray{"login_name1", "login_name2"},
+ database.TextArray[string]{"login_name1", "login_name2"},
"login_name1",
//human
nil,
@@ -464,7 +464,7 @@ func Test_UserPrepares(t *testing.T) {
State: domain.UserStateActive,
Type: domain.UserTypeMachine,
Username: "username",
- LoginNames: database.StringArray{"login_name1", "login_name2"},
+ LoginNames: database.TextArray[string]{"login_name1", "login_name2"},
PreferredLoginName: "login_name1",
Machine: &Machine{
Name: "name",
@@ -873,7 +873,7 @@ func Test_UserPrepares(t *testing.T) {
domain.UserStateActive,
domain.UserTypeHuman,
"username",
- database.StringArray{"login_name1", "login_name2"},
+ database.TextArray[string]{"login_name1", "login_name2"},
"login_name1",
//human
"id",
@@ -904,7 +904,7 @@ func Test_UserPrepares(t *testing.T) {
State: domain.UserStateActive,
Type: domain.UserTypeHuman,
Username: "username",
- LoginNames: database.StringArray{"login_name1", "login_name2"},
+ LoginNames: database.TextArray[string]{"login_name1", "login_name2"},
PreferredLoginName: "login_name1",
FirstName: "first_name",
LastName: "last_name",
@@ -936,7 +936,7 @@ func Test_UserPrepares(t *testing.T) {
domain.UserStateActive,
domain.UserTypeHuman,
"username",
- database.StringArray{"login_name1", "login_name2"},
+ database.TextArray[string]{"login_name1", "login_name2"},
"login_name1",
//human
"id",
@@ -1017,7 +1017,7 @@ func Test_UserPrepares(t *testing.T) {
domain.UserStateActive,
domain.UserTypeHuman,
"username",
- database.StringArray{"login_name1", "login_name2"},
+ database.TextArray[string]{"login_name1", "login_name2"},
"login_name1",
//human
"id",
@@ -1056,7 +1056,7 @@ func Test_UserPrepares(t *testing.T) {
State: domain.UserStateActive,
Type: domain.UserTypeHuman,
Username: "username",
- LoginNames: database.StringArray{"login_name1", "login_name2"},
+ LoginNames: database.TextArray[string]{"login_name1", "login_name2"},
PreferredLoginName: "login_name1",
Human: &Human{
FirstName: "first_name",
@@ -1092,7 +1092,7 @@ func Test_UserPrepares(t *testing.T) {
domain.UserStateActive,
domain.UserTypeHuman,
"username",
- database.StringArray{"login_name1", "login_name2"},
+ database.TextArray[string]{"login_name1", "login_name2"},
"login_name1",
//human
"id",
@@ -1123,7 +1123,7 @@ func Test_UserPrepares(t *testing.T) {
domain.UserStateActive,
domain.UserTypeMachine,
"username",
- database.StringArray{"login_name1", "login_name2"},
+ database.TextArray[string]{"login_name1", "login_name2"},
"login_name1",
//human
nil,
@@ -1162,7 +1162,7 @@ func Test_UserPrepares(t *testing.T) {
State: domain.UserStateActive,
Type: domain.UserTypeHuman,
Username: "username",
- LoginNames: database.StringArray{"login_name1", "login_name2"},
+ LoginNames: database.TextArray[string]{"login_name1", "login_name2"},
PreferredLoginName: "login_name1",
Human: &Human{
FirstName: "first_name",
@@ -1187,7 +1187,7 @@ func Test_UserPrepares(t *testing.T) {
State: domain.UserStateActive,
Type: domain.UserTypeMachine,
Username: "username",
- LoginNames: database.StringArray{"login_name1", "login_name2"},
+ LoginNames: database.TextArray[string]{"login_name1", "login_name2"},
PreferredLoginName: "login_name1",
Machine: &Machine{
Name: "name",
diff --git a/internal/query/zitadel_permission.go b/internal/query/zitadel_permission.go
index b44ac4d85b..29baa7680b 100644
--- a/internal/query/zitadel_permission.go
+++ b/internal/query/zitadel_permission.go
@@ -26,7 +26,7 @@ func (q *Queries) MyZitadelPermissions(ctx context.Context, orgID, userID string
}
memberships, err := q.Memberships(ctx, &MembershipSearchQuery{
Queries: []SearchQuery{userIDQuery, Or(orgIDsQuery, grantedOrgIDQuery)},
- }, false)
+ }, false, false)
if err != nil {
return nil, err
}
diff --git a/internal/renderer/renderer.go b/internal/renderer/renderer.go
index ceeacc03ce..72da287a36 100644
--- a/internal/renderer/renderer.go
+++ b/internal/renderer/renderer.go
@@ -116,10 +116,8 @@ func (r *Renderer) addFileToTemplate(dir http.FileSystem, tmpl *template.Templat
return err
}
tmpl, err = tmpl.New(file.Name()).Funcs(funcs).Parse(string(content))
- if err != nil {
- return err
- }
- return nil
+
+ return err
}
func (r *Renderer) registerTranslateFn(req *http.Request, translator *i18n.Translator, funcs map[string]interface{}) map[string]interface{} {
diff --git a/internal/repository/action/action.go b/internal/repository/action/action.go
index 38eaf29e39..e1195fa66e 100644
--- a/internal/repository/action/action.go
+++ b/internal/repository/action/action.go
@@ -2,12 +2,10 @@ package action
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -20,15 +18,15 @@ const (
RemovedEventType = eventTypePrefix + "removed"
)
-func NewAddActionNameUniqueConstraint(actionName, resourceOwner string) *eventstore.EventUniqueConstraint {
+func NewAddActionNameUniqueConstraint(actionName, resourceOwner string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueActionNameType,
actionName+":"+resourceOwner,
"Errors.Action.AlreadyExists")
}
-func NewRemoveActionNameUniqueConstraint(actionName, resourceOwner string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveActionNameUniqueConstraint(actionName, resourceOwner string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueActionNameType,
actionName+":"+resourceOwner)
}
@@ -42,12 +40,12 @@ type AddedEvent struct {
AllowedToFail bool `json:"allowedToFail"`
}
-func (e *AddedEvent) Data() interface{} {
+func (e *AddedEvent) Payload() interface{} {
return e
}
-func (e *AddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddActionNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
+func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddActionNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
}
func NewAddedEvent(
@@ -71,12 +69,12 @@ func NewAddedEvent(
}
}
-func AddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "ACTION-4n8vs", "unable to unmarshal action added")
}
@@ -94,15 +92,15 @@ type ChangedEvent struct {
oldName string
}
-func (e *ChangedEvent) Data() interface{} {
+func (e *ChangedEvent) Payload() interface{} {
return e
}
-func (e *ChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
if e.oldName == "" {
return nil
}
- return []*eventstore.EventUniqueConstraint{
+ return []*eventstore.UniqueConstraint{
NewRemoveActionNameUniqueConstraint(e.oldName, e.Aggregate().ResourceOwner),
NewAddActionNameUniqueConstraint(*e.Name, e.Aggregate().ResourceOwner),
}
@@ -156,12 +154,12 @@ func ChangeAllowedToFail(allowedToFail bool) func(event *ChangedEvent) {
}
}
-func ChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "ACTION-4n8vs", "unable to unmarshal action changed")
}
@@ -173,11 +171,11 @@ type DeactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *DeactivatedEvent) Data() interface{} {
+func (e *DeactivatedEvent) Payload() interface{} {
return nil
}
-func (e *DeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -191,7 +189,7 @@ func NewDeactivatedEvent(ctx context.Context, aggregate *eventstore.Aggregate) *
}
}
-func DeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &DeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -201,11 +199,11 @@ type ReactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *ReactivatedEvent) Data() interface{} {
+func (e *ReactivatedEvent) Payload() interface{} {
return nil
}
-func (e *ReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -219,7 +217,7 @@ func NewReactivatedEvent(ctx context.Context, aggregate *eventstore.Aggregate) *
}
}
-func ReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &ReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -231,12 +229,12 @@ type RemovedEvent struct {
name string
}
-func (e *RemovedEvent) Data() interface{} {
+func (e *RemovedEvent) Payload() interface{} {
return e
}
-func (e *RemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveActionNameUniqueConstraint(e.name, e.Aggregate().ResourceOwner)}
+func (e *RemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveActionNameUniqueConstraint(e.name, e.Aggregate().ResourceOwner)}
}
func NewRemovedEvent(
@@ -254,7 +252,7 @@ func NewRemovedEvent(
}
}
-func RemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &RemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/asset/asset.go b/internal/repository/asset/asset.go
index 344585fb3a..e965b1ef8b 100644
--- a/internal/repository/asset/asset.go
+++ b/internal/repository/asset/asset.go
@@ -1,11 +1,8 @@
package asset
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -19,11 +16,11 @@ type AddedEvent struct {
StoreKey string `json:"storeKey"`
}
-func (e *AddedEvent) Data() interface{} {
+func (e *AddedEvent) Payload() interface{} {
return e
}
-func (e *AddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -38,12 +35,12 @@ func NewAddedEvent(
}
}
-func AddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "ASSET-1WEAx", "unable to unmarshal asset")
}
@@ -57,11 +54,11 @@ type RemovedEvent struct {
StoreKey string `json:"storeKey"`
}
-func (e *RemovedEvent) Data() interface{} {
+func (e *RemovedEvent) Payload() interface{} {
return e
}
-func (e *RemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -76,12 +73,12 @@ func NewRemovedEvent(
}
}
-func RemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &RemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "ASSET-1m9PP", "unable to unmarshal asset")
}
diff --git a/internal/repository/authrequest/auth_request.go b/internal/repository/authrequest/auth_request.go
index a279f23c92..3633da54a2 100644
--- a/internal/repository/authrequest/auth_request.go
+++ b/internal/repository/authrequest/auth_request.go
@@ -2,13 +2,11 @@ package authrequest
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -40,11 +38,11 @@ type AddedEvent struct {
HintUserID *string `json:"hint_user_id,omitempty"`
}
-func (e *AddedEvent) Data() interface{} {
+func (e *AddedEvent) Payload() interface{} {
return e
}
-func (e *AddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -88,11 +86,11 @@ func NewAddedEvent(ctx context.Context,
}
}
-func AddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &AddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "AUTHR-DG4gn", "unable to unmarshal auth request added")
}
@@ -109,11 +107,11 @@ type SessionLinkedEvent struct {
AuthMethods []domain.UserAuthMethodType `json:"auth_methods"`
}
-func (e *SessionLinkedEvent) Data() interface{} {
+func (e *SessionLinkedEvent) Payload() interface{} {
return e
}
-func (e *SessionLinkedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SessionLinkedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -137,11 +135,11 @@ func NewSessionLinkedEvent(ctx context.Context,
}
}
-func SessionLinkedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SessionLinkedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &SessionLinkedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "AUTHR-Sfe3w", "unable to unmarshal auth request session linked")
}
@@ -155,11 +153,11 @@ type FailedEvent struct {
Reason domain.OIDCErrorReason `json:"reason,omitempty"`
}
-func (e *FailedEvent) Data() interface{} {
+func (e *FailedEvent) Payload() interface{} {
return e
}
-func (e *FailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *FailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -178,11 +176,11 @@ func NewFailedEvent(
}
}
-func FailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func FailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &FailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "AUTHR-Sfe3w", "unable to unmarshal auth request session linked")
}
@@ -194,11 +192,11 @@ type CodeAddedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *CodeAddedEvent) Data() interface{} {
+func (e *CodeAddedEvent) Payload() interface{} {
return e
}
-func (e *CodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *CodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -214,11 +212,11 @@ func NewCodeAddedEvent(ctx context.Context,
}
}
-func CodeAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CodeAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &CodeAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "AUTHR-Sfe3w", "unable to unmarshal auth request code added")
}
@@ -230,11 +228,11 @@ type CodeExchangedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *CodeExchangedEvent) Data() interface{} {
+func (e *CodeExchangedEvent) Payload() interface{} {
return nil
}
-func (e *CodeExchangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *CodeExchangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -250,7 +248,7 @@ func NewCodeExchangedEvent(ctx context.Context,
}
}
-func CodeExchangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CodeExchangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &CodeExchangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -260,11 +258,11 @@ type SucceededEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *SucceededEvent) Data() interface{} {
+func (e *SucceededEvent) Payload() interface{} {
return nil
}
-func (e *SucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -280,7 +278,7 @@ func NewSucceededEvent(ctx context.Context,
}
}
-func SucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &SucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/deviceauth/constraints.go b/internal/repository/deviceauth/constraints.go
index 679220524c..d8362760ea 100644
--- a/internal/repository/deviceauth/constraints.go
+++ b/internal/repository/deviceauth/constraints.go
@@ -17,8 +17,8 @@ func deviceCodeUniqueField(clientID, deviceCode string) string {
return strings.Join([]string{clientID, deviceCode}, ":")
}
-func NewAddUniqueConstraints(clientID, deviceCode, userCode string) []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{
+func NewAddUniqueConstraints(clientID, deviceCode, userCode string) []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{
eventstore.NewAddEventUniqueConstraint(
UniqueDeviceCode,
deviceCodeUniqueField(clientID, deviceCode),
@@ -32,13 +32,13 @@ func NewAddUniqueConstraints(clientID, deviceCode, userCode string) []*eventstor
}
}
-func NewRemoveUniqueConstraints(clientID, deviceCode, userCode string) []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{
- eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveUniqueConstraints(clientID, deviceCode, userCode string) []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{
+ eventstore.NewRemoveUniqueConstraint(
UniqueDeviceCode,
deviceCodeUniqueField(clientID, deviceCode),
),
- eventstore.NewRemoveEventUniqueConstraint(
+ eventstore.NewRemoveUniqueConstraint(
UniqueUserCode,
userCode,
),
diff --git a/internal/repository/deviceauth/device_auth.go b/internal/repository/deviceauth/device_auth.go
index 0ece3e78f9..b03f79740f 100644
--- a/internal/repository/deviceauth/device_auth.go
+++ b/internal/repository/deviceauth/device_auth.go
@@ -31,11 +31,11 @@ func (e *AddedEvent) SetBaseEvent(b *eventstore.BaseEvent) {
e.BaseEvent = b
}
-func (e *AddedEvent) Data() any {
+func (e *AddedEvent) Payload() any {
return e
}
-func (e *AddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return NewAddUniqueConstraints(e.ClientID, e.DeviceCode, e.UserCode)
}
@@ -65,11 +65,11 @@ func (e *ApprovedEvent) SetBaseEvent(b *eventstore.BaseEvent) {
e.BaseEvent = b
}
-func (e *ApprovedEvent) Data() any {
+func (e *ApprovedEvent) Payload() any {
return e
}
-func (e *ApprovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ApprovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -95,11 +95,11 @@ func (e *CanceledEvent) SetBaseEvent(b *eventstore.BaseEvent) {
e.BaseEvent = b
}
-func (e *CanceledEvent) Data() any {
+func (e *CanceledEvent) Payload() any {
return e
}
-func (e *CanceledEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *CanceledEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -119,11 +119,11 @@ func (e *RemovedEvent) SetBaseEvent(b *eventstore.BaseEvent) {
e.BaseEvent = b
}
-func (e *RemovedEvent) Data() any {
+func (e *RemovedEvent) Payload() any {
return e
}
-func (e *RemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return NewRemoveUniqueConstraints(e.ClientID, e.DeviceCode, e.UserCode)
}
diff --git a/internal/repository/feature/feature.go b/internal/repository/feature/feature.go
index b3757c1035..4ce007d2bc 100644
--- a/internal/repository/feature/feature.go
+++ b/internal/repository/feature/feature.go
@@ -26,11 +26,11 @@ func (e *SetEvent[T]) SetBaseEvent(b *eventstore.BaseEvent) {
e.BaseEvent = b
}
-func (e *SetEvent[T]) Data() interface{} {
+func (e *SetEvent[T]) Payload() interface{} {
return e
}
-func (e *SetEvent[T]) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SetEvent[T]) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/repository/flow/flow.go b/internal/repository/flow/flow.go
index 649cab70f8..2bf0932ece 100644
--- a/internal/repository/flow/flow.go
+++ b/internal/repository/flow/flow.go
@@ -1,12 +1,9 @@
package flow
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -25,11 +22,11 @@ type TriggerActionsSetEvent struct {
ActionIDs []string `json:"actionIDs"`
}
-func (e *TriggerActionsSetEvent) Data() interface{} {
+func (e *TriggerActionsSetEvent) Payload() interface{} {
return e
}
-func (e *TriggerActionsSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *TriggerActionsSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -47,12 +44,12 @@ func NewTriggerActionsSetEvent(
}
}
-func TriggerActionsSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func TriggerActionsSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &TriggerActionsSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "FLOW-4n8vs", "unable to unmarshal trigger actions")
}
@@ -68,11 +65,11 @@ type TriggerActionsCascadeRemovedEvent struct {
ActionID string `json:"actionID"`
}
-func (e *TriggerActionsCascadeRemovedEvent) Data() interface{} {
+func (e *TriggerActionsCascadeRemovedEvent) Payload() interface{} {
return e
}
-func (e *TriggerActionsCascadeRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *TriggerActionsCascadeRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -88,12 +85,12 @@ func NewTriggerActionsCascadeRemovedEvent(
}
}
-func TriggerActionsCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func TriggerActionsCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &TriggerActionsCascadeRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "FLOW-4n8vs", "unable to unmarshal trigger actions")
}
@@ -107,11 +104,11 @@ type FlowClearedEvent struct {
FlowType domain.FlowType `json:"flowType"`
}
-func (e *FlowClearedEvent) Data() interface{} {
+func (e *FlowClearedEvent) Payload() interface{} {
return e
}
-func (e *FlowClearedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *FlowClearedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -125,12 +122,12 @@ func NewFlowClearedEvent(
}
}
-func FlowClearedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func FlowClearedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &FlowClearedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "FLOW-BHfg2", "unable to unmarshal flow cleared")
}
diff --git a/internal/repository/idp/apple.go b/internal/repository/idp/apple.go
index 8c9972c54b..f140357c05 100644
--- a/internal/repository/idp/apple.go
+++ b/internal/repository/idp/apple.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type AppleIDPAddedEvent struct {
@@ -46,20 +43,20 @@ func NewAppleIDPAddedEvent(
}
}
-func (e *AppleIDPAddedEvent) Data() interface{} {
+func (e *AppleIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *AppleIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AppleIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func AppleIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AppleIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AppleIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Beqss", "unable to unmarshal event")
}
@@ -142,20 +139,20 @@ func ChangeAppleOptions(options OptionChanges) func(*AppleIDPChangedEvent) {
}
}
-func (e *AppleIDPChangedEvent) Data() interface{} {
+func (e *AppleIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *AppleIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AppleIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func AppleIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AppleIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AppleIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-NBe1s", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/azuread.go b/internal/repository/idp/azuread.go
index e986801f27..ae7a434a8f 100644
--- a/internal/repository/idp/azuread.go
+++ b/internal/repository/idp/azuread.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type AzureADIDPAddedEvent struct {
@@ -46,20 +43,20 @@ func NewAzureADIDPAddedEvent(
}
}
-func (e *AzureADIDPAddedEvent) Data() interface{} {
+func (e *AzureADIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *AzureADIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AzureADIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func AzureADIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AzureADIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AzureADIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Grh2g", "unable to unmarshal event")
}
@@ -142,20 +139,20 @@ func ChangeAzureADIsEmailVerified(isEmailVerified bool) func(*AzureADIDPChangedE
}
}
-func (e *AzureADIDPChangedEvent) Data() interface{} {
+func (e *AzureADIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *AzureADIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AzureADIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func AzureADIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AzureADIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AzureADIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-D3gjzh", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/github.go b/internal/repository/idp/github.go
index e3f30f20f3..0b0a902a1d 100644
--- a/internal/repository/idp/github.go
+++ b/internal/repository/idp/github.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type GitHubIDPAddedEvent struct {
@@ -40,20 +37,20 @@ func NewGitHubIDPAddedEvent(
}
}
-func (e *GitHubIDPAddedEvent) Data() interface{} {
+func (e *GitHubIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *GitHubIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitHubIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitHubIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitHubIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-sdfs3", "unable to unmarshal event")
}
@@ -121,20 +118,20 @@ func ChangeGitHubScopes(scopes []string) func(*GitHubIDPChangedEvent) {
}
}
-func (e *GitHubIDPChangedEvent) Data() interface{} {
+func (e *GitHubIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *GitHubIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitHubIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitHubIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitHubIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Sfrth", "unable to unmarshal event")
}
@@ -182,20 +179,20 @@ func NewGitHubEnterpriseIDPAddedEvent(
}
}
-func (e *GitHubEnterpriseIDPAddedEvent) Data() interface{} {
+func (e *GitHubEnterpriseIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *GitHubEnterpriseIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitHubEnterpriseIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitHubEnterpriseIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubEnterpriseIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitHubEnterpriseIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-sdfs3", "unable to unmarshal event")
}
@@ -284,20 +281,20 @@ func ChangeGitHubEnterpriseScopes(scopes []string) func(*GitHubEnterpriseIDPChan
}
}
-func (e *GitHubEnterpriseIDPChangedEvent) Data() interface{} {
+func (e *GitHubEnterpriseIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *GitHubEnterpriseIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitHubEnterpriseIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitHubEnterpriseIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubEnterpriseIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitHubEnterpriseIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-ASf3r", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/gitlab.go b/internal/repository/idp/gitlab.go
index 78ef99c4b0..85cfabc746 100644
--- a/internal/repository/idp/gitlab.go
+++ b/internal/repository/idp/gitlab.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type GitLabIDPAddedEvent struct {
@@ -40,20 +37,20 @@ func NewGitLabIDPAddedEvent(
}
}
-func (e *GitLabIDPAddedEvent) Data() interface{} {
+func (e *GitLabIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *GitLabIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitLabIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitLabIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitLabIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-KLewio", "unable to unmarshal event")
}
@@ -122,20 +119,20 @@ func ChangeGitLabOptions(options OptionChanges) func(*GitLabIDPChangedEvent) {
}
}
-func (e *GitLabIDPChangedEvent) Data() interface{} {
+func (e *GitLabIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *GitLabIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitLabIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitLabIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitLabIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Sfhjk", "unable to unmarshal event")
}
@@ -177,20 +174,20 @@ func NewGitLabSelfHostedIDPAddedEvent(
}
}
-func (e *GitLabSelfHostedIDPAddedEvent) Data() interface{} {
+func (e *GitLabSelfHostedIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *GitLabSelfHostedIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitLabSelfHostedIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitLabSelfHostedIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabSelfHostedIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitLabSelfHostedIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-S1efv", "unable to unmarshal event")
}
@@ -266,20 +263,20 @@ func ChangeGitLabSelfHostedOptions(options OptionChanges) func(*GitLabSelfHosted
}
}
-func (e *GitLabSelfHostedIDPChangedEvent) Data() interface{} {
+func (e *GitLabSelfHostedIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *GitLabSelfHostedIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GitLabSelfHostedIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GitLabSelfHostedIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabSelfHostedIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GitLabSelfHostedIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-SFrhj", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/google.go b/internal/repository/idp/google.go
index 4bb427ac8a..3510b27ac7 100644
--- a/internal/repository/idp/google.go
+++ b/internal/repository/idp/google.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type GoogleIDPAddedEvent struct {
@@ -40,20 +37,20 @@ func NewGoogleIDPAddedEvent(
}
}
-func (e *GoogleIDPAddedEvent) Data() interface{} {
+func (e *GoogleIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *GoogleIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GoogleIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GoogleIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GoogleIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GoogleIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-SAff1", "unable to unmarshal event")
}
@@ -121,20 +118,20 @@ func ChangeGoogleOptions(options OptionChanges) func(*GoogleIDPChangedEvent) {
}
}
-func (e *GoogleIDPChangedEvent) Data() interface{} {
+func (e *GoogleIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *GoogleIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GoogleIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func GoogleIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GoogleIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GoogleIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-SF3t2", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/idp.go b/internal/repository/idp/idp.go
index 540e2d243e..96b2204854 100644
--- a/internal/repository/idp/idp.go
+++ b/internal/repository/idp/idp.go
@@ -1,11 +1,8 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type Options struct {
@@ -74,20 +71,20 @@ func NewRemovedEvent(
}
}
-func (e *RemovedEvent) Data() interface{} {
+func (e *RemovedEvent) Payload() interface{} {
return e
}
-func (e *RemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func RemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &RemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-plSD2", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/jwt.go b/internal/repository/idp/jwt.go
index 076c10909f..786d4a62f7 100644
--- a/internal/repository/idp/jwt.go
+++ b/internal/repository/idp/jwt.go
@@ -1,11 +1,8 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type JWTIDPAddedEvent struct {
@@ -42,20 +39,20 @@ func NewJWTIDPAddedEvent(
}
}
-func (e *JWTIDPAddedEvent) Data() interface{} {
+func (e *JWTIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *JWTIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *JWTIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func JWTIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &JWTIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Et1dq", "unable to unmarshal event")
}
@@ -131,20 +128,20 @@ func ChangeJWTOptions(options OptionChanges) func(*JWTIDPChangedEvent) {
}
}
-func (e *JWTIDPChangedEvent) Data() interface{} {
+func (e *JWTIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *JWTIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *JWTIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func JWTIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &JWTIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-D3gjzh", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/ldap.go b/internal/repository/idp/ldap.go
index 5115bc46ae..bc1b41fb75 100644
--- a/internal/repository/idp/ldap.go
+++ b/internal/repository/idp/ldap.go
@@ -1,13 +1,11 @@
package idp
import (
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type LDAPIDPAddedEvent struct {
@@ -165,20 +163,20 @@ func NewLDAPIDPAddedEvent(
}
}
-func (e *LDAPIDPAddedEvent) Data() interface{} {
+func (e *LDAPIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *LDAPIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LDAPIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func LDAPIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LDAPIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LDAPIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Dgh42", "unable to unmarshal event")
}
@@ -329,20 +327,20 @@ func ChangeLDAPOptions(options OptionChanges) func(*LDAPIDPChangedEvent) {
}
}
-func (e *LDAPIDPChangedEvent) Data() interface{} {
+func (e *LDAPIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *LDAPIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LDAPIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func LDAPIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LDAPIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LDAPIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Sfth3", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/oauth.go b/internal/repository/idp/oauth.go
index b693cd25e5..ce0178f8db 100644
--- a/internal/repository/idp/oauth.go
+++ b/internal/repository/idp/oauth.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type OAuthIDPAddedEvent struct {
@@ -52,20 +49,20 @@ func NewOAuthIDPAddedEvent(
}
}
-func (e *OAuthIDPAddedEvent) Data() interface{} {
+func (e *OAuthIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *OAuthIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OAuthIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func OAuthIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OAuthIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OAuthIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Et1dq", "unable to unmarshal event")
}
@@ -161,20 +158,20 @@ func ChangeOAuthIDAttribute(idAttribute string) func(*OAuthIDPChangedEvent) {
}
}
-func (e *OAuthIDPChangedEvent) Data() interface{} {
+func (e *OAuthIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *OAuthIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OAuthIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func OAuthIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OAuthIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OAuthIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-SAf3gw", "unable to unmarshal event")
}
diff --git a/internal/repository/idp/oidc.go b/internal/repository/idp/oidc.go
index 09437d18e0..45478dc83d 100644
--- a/internal/repository/idp/oidc.go
+++ b/internal/repository/idp/oidc.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type OIDCIDPAddedEvent struct {
@@ -46,20 +43,20 @@ func NewOIDCIDPAddedEvent(
}
}
-func (e *OIDCIDPAddedEvent) Data() interface{} {
+func (e *OIDCIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *OIDCIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func OIDCIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Et1dq", "unable to unmarshal event")
}
@@ -142,20 +139,20 @@ func ChangeOIDCIsIDTokenMapping(idTokenMapping bool) func(*OIDCIDPChangedEvent)
}
}
-func (e *OIDCIDPChangedEvent) Data() interface{} {
+func (e *OIDCIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *OIDCIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func OIDCIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-D3gjzh", "unable to unmarshal event")
}
@@ -197,11 +194,11 @@ func (e *OIDCIDPMigratedAzureADEvent) Data() interface{} {
return e
}
-func (e *OIDCIDPMigratedAzureADEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCIDPMigratedAzureADEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func OIDCIDPMigratedAzureADEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPMigratedAzureADEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := AzureADIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -240,11 +237,11 @@ func (e *OIDCIDPMigratedGoogleEvent) Data() interface{} {
return e
}
-func (e *OIDCIDPMigratedGoogleEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCIDPMigratedGoogleEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func OIDCIDPMigratedGoogleEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPMigratedGoogleEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := GoogleIDPAddedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/idp/saml.go b/internal/repository/idp/saml.go
index 2030bcd6f4..c4205600f4 100644
--- a/internal/repository/idp/saml.go
+++ b/internal/repository/idp/saml.go
@@ -1,12 +1,9 @@
package idp
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type SAMLIDPAddedEvent struct {
@@ -46,20 +43,20 @@ func NewSAMLIDPAddedEvent(
}
}
-func (e *SAMLIDPAddedEvent) Data() interface{} {
+func (e *SAMLIDPAddedEvent) Payload() interface{} {
return e
}
-func (e *SAMLIDPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SAMLIDPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SAMLIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SAMLIDPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-v9uajo3k71", "unable to unmarshal event")
}
@@ -142,20 +139,20 @@ func ChangeSAMLOptions(options OptionChanges) func(*SAMLIDPChangedEvent) {
}
}
-func (e *SAMLIDPChangedEvent) Data() interface{} {
+func (e *SAMLIDPChangedEvent) Payload() interface{} {
return e
}
-func (e *SAMLIDPChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SAMLIDPChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SAMLIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SAMLIDPChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-w1t1824tw5", "unable to unmarshal event")
}
diff --git a/internal/repository/idpconfig/idp_config.go b/internal/repository/idpconfig/idp_config.go
index 1578ed8284..ca9754ebe7 100644
--- a/internal/repository/idpconfig/idp_config.go
+++ b/internal/repository/idpconfig/idp_config.go
@@ -1,27 +1,24 @@
package idpconfig
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
UniqueIDPConfigNameType = "idp_config_names"
)
-func NewAddIDPConfigNameUniqueConstraint(idpConfigName, resourceOwner string) *eventstore.EventUniqueConstraint {
+func NewAddIDPConfigNameUniqueConstraint(idpConfigName, resourceOwner string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueIDPConfigNameType,
idpConfigName+resourceOwner,
"Errors.IDPConfig.AlreadyExists")
}
-func NewRemoveIDPConfigNameUniqueConstraint(idpConfigName, resourceOwner string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveIDPConfigNameUniqueConstraint(idpConfigName, resourceOwner string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueIDPConfigNameType,
idpConfigName+resourceOwner)
}
@@ -54,20 +51,20 @@ func NewIDPConfigAddedEvent(
}
}
-func (e *IDPConfigAddedEvent) Data() interface{} {
+func (e *IDPConfigAddedEvent) Payload() interface{} {
return e
}
-func (e *IDPConfigAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddIDPConfigNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
+func (e *IDPConfigAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddIDPConfigNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
}
-func IDPConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IDPConfigAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-plaBZ", "unable to unmarshal event")
}
@@ -85,15 +82,15 @@ type IDPConfigChangedEvent struct {
oldName string `json:"-"`
}
-func (e *IDPConfigChangedEvent) Data() interface{} {
+func (e *IDPConfigChangedEvent) Payload() interface{} {
return e
}
-func (e *IDPConfigChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *IDPConfigChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
if e.oldName == "" {
return nil
}
- return []*eventstore.EventUniqueConstraint{
+ return []*eventstore.UniqueConstraint{
NewRemoveIDPConfigNameUniqueConstraint(e.oldName, e.Aggregate().ResourceOwner),
NewAddIDPConfigNameUniqueConstraint(*e.Name, e.Aggregate().ResourceOwner),
}
@@ -139,12 +136,12 @@ func ChangeAutoRegister(autoRegister bool) func(*IDPConfigChangedEvent) {
}
}
-func IDPConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IDPConfigChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-plaBZ", "unable to unmarshal event")
}
@@ -169,20 +166,20 @@ func NewIDPConfigDeactivatedEvent(
}
}
-func (e *IDPConfigDeactivatedEvent) Data() interface{} {
+func (e *IDPConfigDeactivatedEvent) Payload() interface{} {
return e
}
-func (e *IDPConfigDeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *IDPConfigDeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func IDPConfigDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IDPConfigDeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-plaBZ", "unable to unmarshal event")
}
@@ -207,20 +204,20 @@ func NewIDPConfigReactivatedEvent(
}
}
-func (e *IDPConfigReactivatedEvent) Data() interface{} {
+func (e *IDPConfigReactivatedEvent) Payload() interface{} {
return e
}
-func (e *IDPConfigReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *IDPConfigReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func IDPConfigReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IDPConfigReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-plaBZ", "unable to unmarshal event")
}
@@ -248,20 +245,20 @@ func NewIDPConfigRemovedEvent(
}
}
-func (e *IDPConfigRemovedEvent) Data() interface{} {
+func (e *IDPConfigRemovedEvent) Payload() interface{} {
return e
}
-func (e *IDPConfigRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveIDPConfigNameUniqueConstraint(e.name, e.Aggregate().ResourceOwner)}
+func (e *IDPConfigRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveIDPConfigNameUniqueConstraint(e.name, e.Aggregate().ResourceOwner)}
}
-func IDPConfigRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IDPConfigRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-plaBZ", "unable to unmarshal event")
}
diff --git a/internal/repository/idpconfig/jwt_config.go b/internal/repository/idpconfig/jwt_config.go
index e329ff3912..b2c460fdbc 100644
--- a/internal/repository/idpconfig/jwt_config.go
+++ b/internal/repository/idpconfig/jwt_config.go
@@ -1,12 +1,9 @@
package idpconfig
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -24,11 +21,11 @@ type JWTConfigAddedEvent struct {
HeaderName string `json:"headerName,omitempty"`
}
-func (e *JWTConfigAddedEvent) Data() interface{} {
+func (e *JWTConfigAddedEvent) Payload() interface{} {
return e
}
-func (e *JWTConfigAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *JWTConfigAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -50,12 +47,12 @@ func NewJWTConfigAddedEvent(
}
}
-func JWTConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &JWTConfigAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "JWT-m0fwf", "unable to unmarshal event")
}
@@ -74,11 +71,11 @@ type JWTConfigChangedEvent struct {
HeaderName *string `json:"headerName,omitempty"`
}
-func (e *JWTConfigChangedEvent) Data() interface{} {
+func (e *JWTConfigChangedEvent) Payload() interface{} {
return e
}
-func (e *JWTConfigChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *JWTConfigChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -126,12 +123,12 @@ func ChangeHeaderName(headerName string) func(*JWTConfigChangedEvent) {
}
}
-func JWTConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &JWTConfigChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "JWT-fk3fs", "unable to unmarshal event")
}
diff --git a/internal/repository/idpconfig/oidc_config.go b/internal/repository/idpconfig/oidc_config.go
index 096c55c9db..36e0136f06 100644
--- a/internal/repository/idpconfig/oidc_config.go
+++ b/internal/repository/idpconfig/oidc_config.go
@@ -1,14 +1,10 @@
package idpconfig
import (
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -31,11 +27,11 @@ type OIDCConfigAddedEvent struct {
UserNameMapping domain.OIDCMappingField `json:"usernameMapping,omitempty"`
}
-func (e *OIDCConfigAddedEvent) Data() interface{} {
+func (e *OIDCConfigAddedEvent) Payload() interface{} {
return e
}
-func (e *OIDCConfigAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCConfigAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -66,12 +62,12 @@ func NewOIDCConfigAddedEvent(
}
}
-func OIDCConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCConfigAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-plaBZ", "unable to unmarshal event")
}
@@ -95,11 +91,11 @@ type OIDCConfigChangedEvent struct {
UserNameMapping *domain.OIDCMappingField `json:"usernameMapping,omitempty"`
}
-func (e *OIDCConfigChangedEvent) Data() interface{} {
+func (e *OIDCConfigChangedEvent) Payload() interface{} {
return e
}
-func (e *OIDCConfigChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCConfigChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -171,12 +167,12 @@ func ChangeScopes(scopes []string) func(*OIDCConfigChangedEvent) {
}
}
-func OIDCConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCConfigChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-plaBZ", "unable to unmarshal event")
}
diff --git a/internal/repository/idpintent/intent.go b/internal/repository/idpintent/intent.go
index 39779df4dd..7a596becb0 100644
--- a/internal/repository/idpintent/intent.go
+++ b/internal/repository/idpintent/intent.go
@@ -2,13 +2,11 @@ package idpintent
import (
"context"
- "encoding/json"
"net/url"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -47,20 +45,20 @@ func NewStartedEvent(
}
}
-func (e *StartedEvent) Data() interface{} {
+func (e *StartedEvent) Payload() any {
return e
}
-func (e *StartedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *StartedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func StartedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func StartedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &StartedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Sf3f1", "unable to unmarshal event")
}
@@ -105,20 +103,20 @@ func NewSucceededEvent(
}
}
-func (e *SucceededEvent) Data() interface{} {
+func (e *SucceededEvent) Payload() interface{} {
return e
}
-func (e *SucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-HBreq", "unable to unmarshal event")
}
@@ -160,20 +158,20 @@ func NewSAMLSucceededEvent(
}
}
-func (e *SAMLSucceededEvent) Data() interface{} {
+func (e *SAMLSucceededEvent) Payload() interface{} {
return e
}
-func (e *SAMLSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SAMLSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SAMLSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SAMLSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-l4tw23y6lq", "unable to unmarshal event")
}
@@ -202,20 +200,20 @@ func NewSAMLRequestEvent(
}
}
-func (e *SAMLRequestEvent) Data() interface{} {
+func (e *SAMLRequestEvent) Payload() interface{} {
return e
}
-func (e *SAMLRequestEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SAMLRequestEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SAMLRequestEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLRequestEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SAMLRequestEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-l85678vwlf", "unable to unmarshal event")
}
@@ -257,20 +255,20 @@ func NewLDAPSucceededEvent(
}
}
-func (e *LDAPSucceededEvent) Data() interface{} {
+func (e *LDAPSucceededEvent) Payload() interface{} {
return e
}
-func (e *LDAPSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LDAPSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func LDAPSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LDAPSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LDAPSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-HBreq", "unable to unmarshal event")
}
@@ -299,20 +297,20 @@ func NewFailedEvent(
}
}
-func (e *FailedEvent) Data() interface{} {
+func (e *FailedEvent) Payload() interface{} {
return e
}
-func (e *FailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *FailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func FailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func FailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &FailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IDP-Sfer3", "unable to unmarshal event")
}
diff --git a/internal/repository/instance/custom_text.go b/internal/repository/instance/custom_text.go
index e6fef42bbb..992a88588c 100644
--- a/internal/repository/instance/custom_text.go
+++ b/internal/repository/instance/custom_text.go
@@ -6,7 +6,6 @@ import (
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -38,7 +37,7 @@ func NewCustomTextSetEvent(
}
}
-func CustomTextSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.CustomTextSetEventMapper(event)
if err != nil {
return nil, err
@@ -67,7 +66,7 @@ func NewCustomTextRemovedEvent(
}
}
-func CustomTextRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.CustomTextRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -95,7 +94,7 @@ func NewCustomTextTemplateRemovedEvent(
}
}
-func CustomTextTemplateRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextTemplateRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.CustomTextTemplateRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/debug_notification_file.go b/internal/repository/instance/debug_notification_file.go
index d886947a21..a8f410bda3 100644
--- a/internal/repository/instance/debug_notification_file.go
+++ b/internal/repository/instance/debug_notification_file.go
@@ -5,8 +5,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/settings"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -38,7 +36,7 @@ func NewDebugNotificationProviderFileAddedEvent(
}
}
-func DebugNotificationProviderFileAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderFileAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := settings.DebugNotificationProviderAddedEventMapper(event)
if err != nil {
return nil, err
@@ -69,7 +67,7 @@ func NewDebugNotificationProviderFileChangedEvent(
return &DebugNotificationProviderFileChangedEvent{DebugNotificationProviderChangedEvent: *changedEvent}, nil
}
-func DebugNotificationProviderFileChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderFileChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := settings.DebugNotificationProviderChangedEventMapper(event)
if err != nil {
return nil, err
@@ -96,7 +94,7 @@ func NewDebugNotificationProviderFileRemovedEvent(
}
}
-func DebugNotificationProviderFileRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderFileRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := settings.DebugNotificationProviderRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/debug_notification_log.go b/internal/repository/instance/debug_notification_log.go
index b9e090af05..6cd6754c12 100644
--- a/internal/repository/instance/debug_notification_log.go
+++ b/internal/repository/instance/debug_notification_log.go
@@ -5,8 +5,6 @@ import (
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/settings"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -40,7 +38,7 @@ func NewDebugNotificationProviderLogAddedEvent(
}
}
-func DebugNotificationProviderLogAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderLogAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := settings.DebugNotificationProviderAddedEventMapper(event)
if err != nil {
return nil, err
@@ -71,7 +69,7 @@ func NewDebugNotificationProviderLogChangedEvent(
return &DebugNotificationProviderLogChangedEvent{DebugNotificationProviderChangedEvent: *changedEvent}, nil
}
-func DebugNotificationProviderLogChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderLogChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := settings.DebugNotificationProviderChangedEventMapper(event)
if err != nil {
return nil, err
@@ -98,7 +96,7 @@ func NewDebugNotificationProviderLogRemovedEvent(
}
}
-func DebugNotificationProviderLogRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderLogRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := settings.DebugNotificationProviderRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/domain.go b/internal/repository/instance/domain.go
index b1a4fa01bd..0194bdbc2f 100644
--- a/internal/repository/instance/domain.go
+++ b/internal/repository/instance/domain.go
@@ -2,12 +2,9 @@ package instance
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -18,15 +15,15 @@ const (
InstanceDomainRemovedEventType = domainEventPrefix + "removed"
)
-func NewAddInstanceDomainUniqueConstraint(domain string) *eventstore.EventUniqueConstraint {
- return eventstore.NewAddGlobalEventUniqueConstraint(
+func NewAddInstanceDomainUniqueConstraint(domain string) *eventstore.UniqueConstraint {
+ return eventstore.NewAddGlobalUniqueConstraint(
UniqueInstanceDomain,
domain,
"Errors.Instance.Domain.AlreadyExists")
}
-func NewRemoveInstanceDomainUniqueConstraint(domain string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveGlobalEventUniqueConstraint(
+func NewRemoveInstanceDomainUniqueConstraint(domain string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveGlobalUniqueConstraint(
UniqueInstanceDomain,
domain)
}
@@ -38,12 +35,12 @@ type DomainAddedEvent struct {
Generated bool `json:"generated,omitempty"`
}
-func (e *DomainAddedEvent) Data() interface{} {
+func (e *DomainAddedEvent) Payload() interface{} {
return e
}
-func (e *DomainAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddInstanceDomainUniqueConstraint(e.Domain)}
+func (e *DomainAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddInstanceDomainUniqueConstraint(e.Domain)}
}
func NewDomainAddedEvent(ctx context.Context, aggregate *eventstore.Aggregate, domain string, generated bool) *DomainAddedEvent {
@@ -58,11 +55,11 @@ func NewDomainAddedEvent(ctx context.Context, aggregate *eventstore.Aggregate, d
}
}
-func DomainAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
domainAdded := &DomainAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, domainAdded)
+ err := event.Unmarshal(domainAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "INSTANCE-3noij", "unable to unmarshal instance domain added")
}
@@ -76,11 +73,11 @@ type DomainPrimarySetEvent struct {
Domain string `json:"domain,omitempty"`
}
-func (e *DomainPrimarySetEvent) Data() interface{} {
+func (e *DomainPrimarySetEvent) Payload() interface{} {
return e
}
-func (e *DomainPrimarySetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainPrimarySetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -95,11 +92,11 @@ func NewDomainPrimarySetEvent(ctx context.Context, aggregate *eventstore.Aggrega
}
}
-func DomainPrimarySetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPrimarySetEventMapper(event eventstore.Event) (eventstore.Event, error) {
domainAdded := &DomainPrimarySetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, domainAdded)
+ err := event.Unmarshal(domainAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "INSTANCE-29jöF", "unable to unmarshal instance domain added")
}
@@ -113,12 +110,12 @@ type DomainRemovedEvent struct {
Domain string `json:"domain,omitempty"`
}
-func (e *DomainRemovedEvent) Data() interface{} {
+func (e *DomainRemovedEvent) Payload() interface{} {
return e
}
-func (e *DomainRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveInstanceDomainUniqueConstraint(e.Domain)}
+func (e *DomainRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveInstanceDomainUniqueConstraint(e.Domain)}
}
func NewDomainRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregate, domain string) *DomainRemovedEvent {
@@ -132,11 +129,11 @@ func NewDomainRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregate,
}
}
-func DomainRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
domainRemoved := &DomainRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, domainRemoved)
+ err := event.Unmarshal(domainRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "INSTANCE-BngB2", "unable to unmarshal instance domain removed")
}
diff --git a/internal/repository/instance/event_default_language.go b/internal/repository/instance/event_default_language.go
index a596a0a5ca..4912664348 100644
--- a/internal/repository/instance/event_default_language.go
+++ b/internal/repository/instance/event_default_language.go
@@ -2,13 +2,11 @@ package instance
import (
"context"
- "encoding/json"
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -21,11 +19,11 @@ type DefaultLanguageSetEvent struct {
Language language.Tag `json:"language"`
}
-func (e *DefaultLanguageSetEvent) Data() interface{} {
+func (e *DefaultLanguageSetEvent) Payload() interface{} {
return e
}
-func (e *DefaultLanguageSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DefaultLanguageSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -44,11 +42,11 @@ func NewDefaultLanguageSetEvent(
}
}
-func DefaultLanguageSetMapper(event *repository.Event) (eventstore.Event, error) {
+func DefaultLanguageSetMapper(event eventstore.Event) (eventstore.Event, error) {
e := &DefaultLanguageSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-3j9fs", "unable to unmarshal default language set")
}
diff --git a/internal/repository/instance/event_iam_project_set.go b/internal/repository/instance/event_iam_project_set.go
index b1aac6985b..b2f15fdd3c 100644
--- a/internal/repository/instance/event_iam_project_set.go
+++ b/internal/repository/instance/event_iam_project_set.go
@@ -2,12 +2,9 @@ package instance
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -21,11 +18,11 @@ type ProjectSetEvent struct {
ProjectID string `json:"iamProjectId"`
}
-func (e *ProjectSetEvent) Data() interface{} {
+func (e *ProjectSetEvent) Payload() interface{} {
return e
}
-func (e *ProjectSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ProjectSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -44,11 +41,11 @@ func NewIAMProjectSetEvent(
}
}
-func ProjectSetMapper(event *repository.Event) (eventstore.Event, error) {
+func ProjectSetMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ProjectSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-cdFZH", "unable to unmarshal global org set")
}
@@ -63,11 +60,11 @@ type ConsoleSetEvent struct {
AppID string `json:"appId"`
}
-func (e *ConsoleSetEvent) Data() interface{} {
+func (e *ConsoleSetEvent) Payload() interface{} {
return e
}
-func (e *ConsoleSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ConsoleSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -88,11 +85,11 @@ func NewIAMConsoleSetEvent(
}
}
-func ConsoleSetMapper(event *repository.Event) (eventstore.Event, error) {
+func ConsoleSetMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ConsoleSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-cdFZH", "unable to unmarshal console set")
}
diff --git a/internal/repository/instance/event_org_set.go b/internal/repository/instance/event_org_set.go
index f960952c31..161e317131 100644
--- a/internal/repository/instance/event_org_set.go
+++ b/internal/repository/instance/event_org_set.go
@@ -2,12 +2,9 @@ package instance
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -20,11 +17,11 @@ type DefaultOrgSetEvent struct {
OrgID string `json:"orgId"`
}
-func (e *DefaultOrgSetEvent) Data() interface{} {
+func (e *DefaultOrgSetEvent) Payload() interface{} {
return e
}
-func (e *DefaultOrgSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DefaultOrgSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -43,11 +40,11 @@ func NewDefaultOrgSetEventEvent(
}
}
-func DefaultOrgSetMapper(event *repository.Event) (eventstore.Event, error) {
+func DefaultOrgSetMapper(event eventstore.Event) (eventstore.Event, error) {
e := &DefaultOrgSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-cdFZH", "unable to unmarshal default org set")
}
diff --git a/internal/repository/instance/idp.go b/internal/repository/instance/idp.go
index 7e82c89b05..3bda1542d0 100644
--- a/internal/repository/instance/idp.go
+++ b/internal/repository/instance/idp.go
@@ -6,7 +6,6 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/idp"
)
@@ -80,7 +79,7 @@ func NewOAuthIDPAddedEvent(
}
}
-func OAuthIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OAuthIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OAuthIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -115,7 +114,7 @@ func NewOAuthIDPChangedEvent(
return &OAuthIDPChangedEvent{OAuthIDPChangedEvent: *changedEvent}, nil
}
-func OAuthIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OAuthIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OAuthIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -160,7 +159,7 @@ func NewOIDCIDPAddedEvent(
}
}
-func OIDCIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -195,7 +194,7 @@ func NewOIDCIDPChangedEvent(
return &OIDCIDPChangedEvent{OIDCIDPChangedEvent: *changedEvent}, nil
}
-func OIDCIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -239,7 +238,7 @@ func NewOIDCIDPMigratedAzureADEvent(
}
}
-func OIDCIDPMigratedAzureADEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPMigratedAzureADEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPMigratedAzureADEventMapper(event)
if err != nil {
return nil, err
@@ -279,7 +278,7 @@ func NewOIDCIDPMigratedGoogleEvent(
}
}
-func OIDCIDPMigratedGoogleEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPMigratedGoogleEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPMigratedGoogleEventMapper(event)
if err != nil {
return nil, err
@@ -322,7 +321,7 @@ func NewJWTIDPAddedEvent(
}
}
-func JWTIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.JWTIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -357,7 +356,7 @@ func NewJWTIDPChangedEvent(
return &JWTIDPChangedEvent{JWTIDPChangedEvent: *changedEvent}, nil
}
-func JWTIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.JWTIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -402,7 +401,7 @@ func NewAzureADIDPAddedEvent(
}
}
-func AzureADIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AzureADIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AzureADIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -437,7 +436,7 @@ func NewAzureADIDPChangedEvent(
return &AzureADIDPChangedEvent{AzureADIDPChangedEvent: *changedEvent}, nil
}
-func AzureADIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AzureADIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AzureADIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -478,7 +477,7 @@ func NewGitHubIDPAddedEvent(
}
}
-func GitHubIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -513,7 +512,7 @@ func NewGitHubIDPChangedEvent(
return &GitHubIDPChangedEvent{GitHubIDPChangedEvent: *changedEvent}, nil
}
-func GitHubIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -560,7 +559,7 @@ func NewGitHubEnterpriseIDPAddedEvent(
}
}
-func GitHubEnterpriseIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubEnterpriseIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubEnterpriseIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -595,7 +594,7 @@ func NewGitHubEnterpriseIDPChangedEvent(
return &GitHubEnterpriseIDPChangedEvent{GitHubEnterpriseIDPChangedEvent: *changedEvent}, nil
}
-func GitHubEnterpriseIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubEnterpriseIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubEnterpriseIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -636,7 +635,7 @@ func NewGitLabIDPAddedEvent(
}
}
-func GitLabIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -671,7 +670,7 @@ func NewGitLabIDPChangedEvent(
return &GitLabIDPChangedEvent{GitLabIDPChangedEvent: *changedEvent}, nil
}
-func GitLabIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -714,7 +713,7 @@ func NewGitLabSelfHostedIDPAddedEvent(
}
}
-func GitLabSelfHostedIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabSelfHostedIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabSelfHostedIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -749,7 +748,7 @@ func NewGitLabSelfHostedIDPChangedEvent(
return &GitLabSelfHostedIDPChangedEvent{GitLabSelfHostedIDPChangedEvent: *changedEvent}, nil
}
-func GitLabSelfHostedIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabSelfHostedIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabSelfHostedIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -790,7 +789,7 @@ func NewGoogleIDPAddedEvent(
}
}
-func GoogleIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GoogleIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GoogleIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -825,7 +824,7 @@ func NewGoogleIDPChangedEvent(
return &GoogleIDPChangedEvent{GoogleIDPChangedEvent: *changedEvent}, nil
}
-func GoogleIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GoogleIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GoogleIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -880,7 +879,7 @@ func NewLDAPIDPAddedEvent(
}
}
-func LDAPIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LDAPIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.LDAPIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -914,7 +913,7 @@ func NewLDAPIDPChangedEvent(
return &LDAPIDPChangedEvent{LDAPIDPChangedEvent: *changedEvent}, nil
}
-func LDAPIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LDAPIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.LDAPIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -959,7 +958,7 @@ func NewAppleIDPAddedEvent(
}
}
-func AppleIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AppleIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AppleIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -994,7 +993,7 @@ func NewAppleIDPChangedEvent(
return &AppleIDPChangedEvent{AppleIDPChangedEvent: *changedEvent}, nil
}
-func AppleIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AppleIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AppleIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -1038,7 +1037,7 @@ func NewSAMLIDPAddedEvent(
}
}
-func SAMLIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.SAMLIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -1073,7 +1072,7 @@ func NewSAMLIDPChangedEvent(
return &SAMLIDPChangedEvent{SAMLIDPChangedEvent: *changedEvent}, nil
}
-func SAMLIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.SAMLIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -1103,11 +1102,11 @@ func NewIDPRemovedEvent(
}
}
-func (e *IDPRemovedEvent) Data() interface{} {
+func (e *IDPRemovedEvent) Payload() interface{} {
return e
}
-func IDPRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.RemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/idp_config.go b/internal/repository/instance/idp_config.go
index ce3aad857d..da3d432acb 100644
--- a/internal/repository/instance/idp_config.go
+++ b/internal/repository/instance/idp_config.go
@@ -3,10 +3,8 @@ package instance
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
)
@@ -48,7 +46,7 @@ func NewIDPConfigAddedEvent(
}
}
-func IDPConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigAddedEventMapper(event)
if err != nil {
return nil, err
@@ -83,7 +81,7 @@ func NewIDPConfigChangedEvent(
return &IDPConfigChangedEvent{IDPConfigChangedEvent: *changeEvent}, nil
}
-func IDPConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigChangedEventMapper(event)
if err != nil {
return nil, err
@@ -115,7 +113,7 @@ func NewIDPConfigRemovedEvent(
}
}
-func IDPConfigRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -146,7 +144,7 @@ func NewIDPConfigDeactivatedEvent(
}
}
-func IDPConfigDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigDeactivatedEventMapper(event)
if err != nil {
return nil, err
@@ -177,7 +175,7 @@ func NewIDPConfigReactivatedEvent(
}
}
-func IDPConfigReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigReactivatedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/idp_jwt_config.go b/internal/repository/instance/idp_jwt_config.go
index bc21f78d0b..912783b45e 100644
--- a/internal/repository/instance/idp_jwt_config.go
+++ b/internal/repository/instance/idp_jwt_config.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
)
@@ -43,7 +41,7 @@ func NewIDPJWTConfigAddedEvent(
}
}
-func IDPJWTConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPJWTConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.JWTConfigAddedEventMapper(event)
if err != nil {
return nil, err
@@ -76,7 +74,7 @@ func NewIDPJWTConfigChangedEvent(
return &IDPJWTConfigChangedEvent{JWTConfigChangedEvent: *changeEvent}, nil
}
-func IDPJWTConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPJWTConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.JWTConfigChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/idp_oidc_config.go b/internal/repository/instance/idp_oidc_config.go
index 0b1bd05674..b702eb2f89 100644
--- a/internal/repository/instance/idp_oidc_config.go
+++ b/internal/repository/instance/idp_oidc_config.go
@@ -3,11 +3,9 @@ package instance
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
)
@@ -54,7 +52,7 @@ func NewIDPOIDCConfigAddedEvent(
}
}
-func IDPOIDCConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPOIDCConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.OIDCConfigAddedEventMapper(event)
if err != nil {
return nil, err
@@ -87,7 +85,7 @@ func NewIDPOIDCConfigChangedEvent(
return &IDPOIDCConfigChangedEvent{OIDCConfigChangedEvent: *changeEvent}, nil
}
-func IDPOIDCConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPOIDCConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.OIDCConfigChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/instance.go b/internal/repository/instance/instance.go
index cb5dd220a9..8480fd17c5 100644
--- a/internal/repository/instance/instance.go
+++ b/internal/repository/instance/instance.go
@@ -2,11 +2,9 @@ package instance
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -21,11 +19,11 @@ type InstanceAddedEvent struct {
Name string `json:"name,omitempty"`
}
-func (e *InstanceAddedEvent) Data() interface{} {
+func (e *InstanceAddedEvent) Payload() interface{} {
return e
}
-func (e *InstanceAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *InstanceAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -40,11 +38,11 @@ func NewInstanceAddedEvent(ctx context.Context, aggregate *eventstore.Aggregate,
}
}
-func InstanceAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func InstanceAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
instanceAdded := &InstanceAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, instanceAdded)
+ err := event.Unmarshal(instanceAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "INSTANCE-s9l3F", "unable to unmarshal instance added")
}
@@ -58,11 +56,11 @@ type InstanceChangedEvent struct {
Name string `json:"name,omitempty"`
}
-func (e *InstanceChangedEvent) Data() interface{} {
+func (e *InstanceChangedEvent) Payload() interface{} {
return e
}
-func (e *InstanceChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *InstanceChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -77,11 +75,11 @@ func NewInstanceChangedEvent(ctx context.Context, aggregate *eventstore.Aggregat
}
}
-func InstanceChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func InstanceChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
instanceChanged := &InstanceChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, instanceChanged)
+ err := event.Unmarshal(instanceChanged)
if err != nil {
return nil, errors.ThrowInternal(err, "INSTANCE-3hfo8", "unable to unmarshal instance changed")
}
@@ -95,12 +93,12 @@ type InstanceRemovedEvent struct {
domains []string
}
-func (e *InstanceRemovedEvent) Data() interface{} {
+func (e *InstanceRemovedEvent) Payload() interface{} {
return nil
}
-func (e *InstanceRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- constraints := make([]*eventstore.EventUniqueConstraint, len(e.domains)+1)
+func (e *InstanceRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ constraints := make([]*eventstore.UniqueConstraint, len(e.domains)+1)
for i, domain := range e.domains {
constraints[i] = NewRemoveInstanceDomainUniqueConstraint(domain)
}
@@ -120,7 +118,7 @@ func NewInstanceRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregat
}
}
-func InstanceRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func InstanceRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &InstanceRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/instance/member.go b/internal/repository/instance/member.go
index baf6b7fde9..0518aab47f 100644
--- a/internal/repository/instance/member.go
+++ b/internal/repository/instance/member.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/member"
)
@@ -40,7 +38,7 @@ func NewMemberAddedEvent(
}
}
-func MemberAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.MemberAddedEventMapper(event)
if err != nil {
return nil, err
@@ -72,7 +70,7 @@ func NewMemberChangedEvent(
}
}
-func MemberChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.ChangedEventMapper(event)
if err != nil {
return nil, err
@@ -102,7 +100,7 @@ func NewMemberRemovedEvent(
}
}
-func MemberRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -132,7 +130,7 @@ func NewMemberCascadeRemovedEvent(
}
}
-func MemberCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.CascadeRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/oidc_settings.go b/internal/repository/instance/oidc_settings.go
index b33f2265e7..edef8d2c68 100644
--- a/internal/repository/instance/oidc_settings.go
+++ b/internal/repository/instance/oidc_settings.go
@@ -2,12 +2,10 @@ package instance
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -46,19 +44,19 @@ func NewOIDCSettingsAddedEvent(
}
}
-func (e *OIDCSettingsAddedEvent) Data() interface{} {
+func (e *OIDCSettingsAddedEvent) Payload() interface{} {
return e
}
-func (e *OIDCSettingsAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCSettingsAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func OIDCSettingsAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCSettingsAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
oidcSettingsAdded := &OIDCSettingsAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, oidcSettingsAdded)
+ err := event.Unmarshal(oidcSettingsAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-soiwj", "unable to unmarshal oidc config added")
}
@@ -75,11 +73,11 @@ type OIDCSettingsChangedEvent struct {
RefreshTokenExpiration *time.Duration `json:"refreshTokenExpiration,omitempty"`
}
-func (e *OIDCSettingsChangedEvent) Data() interface{} {
+func (e *OIDCSettingsChangedEvent) Payload() interface{} {
return e
}
-func (e *OIDCSettingsChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCSettingsChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -130,12 +128,12 @@ func ChangeOIDCSettingsRefreshTokenExpiration(refreshTokenExpiration time.Durati
}
}
-func OIDCSettingsChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCSettingsChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCSettingsChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-f98uf", "unable to unmarshal oidc settings changed")
}
diff --git a/internal/repository/instance/policy_domain.go b/internal/repository/instance/policy_domain.go
index b4d6bb36c2..fbd307e687 100644
--- a/internal/repository/instance/policy_domain.go
+++ b/internal/repository/instance/policy_domain.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -38,7 +36,7 @@ func NewDomainPolicyAddedEvent(
}
}
-func DomainPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.DomainPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -69,7 +67,7 @@ func NewDomainPolicyChangedEvent(
return &DomainPolicyChangedEvent{DomainPolicyChangedEvent: *changedEvent}, nil
}
-func DomainPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.DomainPolicyChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_label.go b/internal/repository/instance/policy_label.go
index 97949935d3..6b14b1cef0 100644
--- a/internal/repository/instance/policy_label.go
+++ b/internal/repository/instance/policy_label.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -68,7 +66,7 @@ func NewLabelPolicyAddedEvent(
}
}
-func LabelPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -99,7 +97,7 @@ func NewLabelPolicyChangedEvent(
return &LabelPolicyChangedEvent{LabelPolicyChangedEvent: *changedEvent}, nil
}
-func LabelPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -126,7 +124,7 @@ func NewLabelPolicyActivatedEvent(
}
}
-func LabelPolicyActivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyActivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyActivatedEventMapper(event)
if err != nil {
return nil, err
@@ -155,7 +153,7 @@ func NewLabelPolicyLogoAddedEvent(
}
}
-func LabelPolicyLogoAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoAddedEventMapper(event)
if err != nil {
return nil, err
@@ -184,7 +182,7 @@ func NewLabelPolicyLogoRemovedEvent(
}
}
-func LabelPolicyLogoRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -213,7 +211,7 @@ func NewLabelPolicyIconAddedEvent(
}
}
-func LabelPolicyIconAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconAddedEventMapper(event)
if err != nil {
return nil, err
@@ -242,7 +240,7 @@ func NewLabelPolicyIconRemovedEvent(
}
}
-func LabelPolicyIconRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -271,7 +269,7 @@ func NewLabelPolicyLogoDarkAddedEvent(
}
}
-func LabelPolicyLogoDarkAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoDarkAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoDarkAddedEventMapper(event)
if err != nil {
return nil, err
@@ -300,7 +298,7 @@ func NewLabelPolicyLogoDarkRemovedEvent(
}
}
-func LabelPolicyLogoDarkRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoDarkRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoDarkRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -329,7 +327,7 @@ func NewLabelPolicyIconDarkAddedEvent(
}
}
-func LabelPolicyIconDarkAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconDarkAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconDarkAddedEventMapper(event)
if err != nil {
return nil, err
@@ -358,7 +356,7 @@ func NewLabelPolicyIconDarkRemovedEvent(
}
}
-func LabelPolicyIconDarkRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconDarkRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconDarkRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -387,7 +385,7 @@ func NewLabelPolicyFontAddedEvent(
}
}
-func LabelPolicyFontAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyFontAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyFontAddedEventMapper(event)
if err != nil {
return nil, err
@@ -416,7 +414,7 @@ func NewLabelPolicyFontRemovedEvent(
}
}
-func LabelPolicyFontRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyFontRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyFontRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -429,11 +427,11 @@ type LabelPolicyAssetsRemovedEvent struct {
policy.LabelPolicyAssetsRemovedEvent
}
-func (e *LabelPolicyAssetsRemovedEvent) Data() interface{} {
+func (e *LabelPolicyAssetsRemovedEvent) Payload() interface{} {
return nil
}
-func (e *LabelPolicyAssetsRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyAssetsRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -451,7 +449,7 @@ func NewLabelPolicyAssetsRemovedEvent(
}
}
-func LabelPolicyAssetsRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyAssetsRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyAssetsRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_login.go b/internal/repository/instance/policy_login.go
index 73a0b3ef46..8085f6d319 100644
--- a/internal/repository/instance/policy_login.go
+++ b/internal/repository/instance/policy_login.go
@@ -4,10 +4,8 @@ import (
"context"
"time"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -67,7 +65,7 @@ func NewLoginPolicyAddedEvent(
}
}
-func LoginPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LoginPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -98,7 +96,7 @@ func NewLoginPolicyChangedEvent(
return &LoginPolicyChangedEvent{LoginPolicyChangedEvent: *changedEvent}, nil
}
-func LoginPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LoginPolicyChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_login_factors.go b/internal/repository/instance/policy_login_factors.go
index 2697ac5d8c..466e28637b 100644
--- a/internal/repository/instance/policy_login_factors.go
+++ b/internal/repository/instance/policy_login_factors.go
@@ -3,10 +3,8 @@ package instance
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -37,7 +35,7 @@ func NewLoginPolicySecondFactorAddedEvent(
}
}
-func SecondFactorAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecondFactorAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.SecondFactorAddedEventMapper(event)
if err != nil {
return nil, err
@@ -68,7 +66,7 @@ func NewLoginPolicySecondFactorRemovedEvent(
}
}
-func SecondFactorRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecondFactorRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.SecondFactorRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -98,7 +96,7 @@ func NewLoginPolicyMultiFactorAddedEvent(
}
}
-func MultiFactorAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MultiFactorAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MultiFactorAddedEventMapper(event)
if err != nil {
return nil, err
@@ -129,7 +127,7 @@ func NewLoginPolicyMultiFactorRemovedEvent(
}
}
-func MultiFactorRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MultiFactorRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MultiFactorRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_login_identity_provider.go b/internal/repository/instance/policy_login_identity_provider.go
index b7471e4c57..16504b6a03 100644
--- a/internal/repository/instance/policy_login_identity_provider.go
+++ b/internal/repository/instance/policy_login_identity_provider.go
@@ -3,10 +3,8 @@ package instance
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -37,7 +35,7 @@ func NewIdentityProviderAddedEvent(
}
}
-func IdentityProviderAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.IdentityProviderAddedEventMapper(event)
if err != nil {
return nil, err
@@ -67,7 +65,7 @@ func NewIdentityProviderRemovedEvent(
}
}
-func IdentityProviderRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.IdentityProviderRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -94,7 +92,7 @@ func NewIdentityProviderCascadeRemovedEvent(
}
}
-func IdentityProviderCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.IdentityProviderCascadeRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_mail_template.go b/internal/repository/instance/policy_mail_template.go
index b159066be4..7db645298b 100644
--- a/internal/repository/instance/policy_mail_template.go
+++ b/internal/repository/instance/policy_mail_template.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -29,7 +28,7 @@ func NewMailTemplateAddedEvent(
}
}
-func MailTemplateAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTemplateAddedEventMapper(event)
if err != nil {
return nil, err
@@ -57,7 +56,7 @@ func NewMailTemplateChangedEvent(
return &MailTemplateChangedEvent{MailTemplateChangedEvent: *changedEvent}, nil
}
-func MailTemplateChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTemplateChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_mail_text.go b/internal/repository/instance/policy_mail_text.go
index 5feb94311d..912c956b89 100644
--- a/internal/repository/instance/policy_mail_text.go
+++ b/internal/repository/instance/policy_mail_text.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -43,7 +42,7 @@ func NewMailTextAddedEvent(
}
}
-func MailTextAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTextAddedEventMapper(event)
if err != nil {
return nil, err
@@ -75,7 +74,7 @@ func NewMailTextChangedEvent(
return &MailTextChangedEvent{MailTextChangedEvent: *changedEvent}, nil
}
-func MailTextChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTextChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_notification.go b/internal/repository/instance/policy_notification.go
index ae8eb7a308..243433362a 100644
--- a/internal/repository/instance/policy_notification.go
+++ b/internal/repository/instance/policy_notification.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -32,7 +31,7 @@ func NewNotificationPolicyAddedEvent(
}
}
-func NotificationPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.NotificationPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -63,7 +62,7 @@ func NewNotificationPolicyChangedEvent(
return &NotificationPolicyChangedEvent{NotificationPolicyChangedEvent: *changedEvent}, nil
}
-func NotificationPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.NotificationPolicyChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_password_age.go b/internal/repository/instance/policy_password_age.go
index a805af4f79..11d2b42883 100644
--- a/internal/repository/instance/policy_password_age.go
+++ b/internal/repository/instance/policy_password_age.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -35,7 +33,7 @@ func NewPasswordAgePolicyAddedEvent(
}
}
-func PasswordAgePolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordAgePolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -66,7 +64,7 @@ func NewPasswordAgePolicyChangedEvent(
return &PasswordAgePolicyChangedEvent{PasswordAgePolicyChangedEvent: *changedEvent}, nil
}
-func PasswordAgePolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordAgePolicyChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_password_complexity.go b/internal/repository/instance/policy_password_complexity.go
index 5cac8c842e..8c46d55f25 100644
--- a/internal/repository/instance/policy_password_complexity.go
+++ b/internal/repository/instance/policy_password_complexity.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -41,7 +39,7 @@ func NewPasswordComplexityPolicyAddedEvent(
}
}
-func PasswordComplexityPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordComplexityPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -72,7 +70,7 @@ func NewPasswordComplexityPolicyChangedEvent(
return &PasswordComplexityPolicyChangedEvent{PasswordComplexityPolicyChangedEvent: *changedEvent}, nil
}
-func PasswordComplexityPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordComplexityPolicyChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_password_lockout.go b/internal/repository/instance/policy_password_lockout.go
index ab6a340843..671b539610 100644
--- a/internal/repository/instance/policy_password_lockout.go
+++ b/internal/repository/instance/policy_password_lockout.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -35,7 +33,7 @@ func NewLockoutPolicyAddedEvent(
}
}
-func LockoutPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LockoutPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -66,7 +64,7 @@ func NewLockoutPolicyChangedEvent(
return &LockoutPolicyChangedEvent{LockoutPolicyChangedEvent: *changedEvent}, nil
}
-func LockoutPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LockoutPolicyChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_privacy.go b/internal/repository/instance/policy_privacy.go
index 2851ba784b..ec374583b7 100644
--- a/internal/repository/instance/policy_privacy.go
+++ b/internal/repository/instance/policy_privacy.go
@@ -5,7 +5,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -39,7 +38,7 @@ func NewPrivacyPolicyAddedEvent(
}
}
-func PrivacyPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PrivacyPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -70,7 +69,7 @@ func NewPrivacyPolicyChangedEvent(
return &PrivacyPolicyChangedEvent{PrivacyPolicyChangedEvent: *changedEvent}, nil
}
-func PrivacyPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PrivacyPolicyChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/instance/policy_security.go b/internal/repository/instance/policy_security.go
index 255294035b..4faeb8eccb 100644
--- a/internal/repository/instance/policy_security.go
+++ b/internal/repository/instance/policy_security.go
@@ -2,11 +2,9 @@ package instance
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -59,19 +57,19 @@ func ChangeSecurityPolicyAllowedOrigins(allowedOrigins []string) func(event *Sec
}
}
-func (e *SecurityPolicySetEvent) Data() interface{} {
+func (e *SecurityPolicySetEvent) Payload() interface{} {
return e
}
-func (e *SecurityPolicySetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SecurityPolicySetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SecurityPolicySetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecurityPolicySetEventMapper(event eventstore.Event) (eventstore.Event, error) {
securityPolicyAdded := &SecurityPolicySetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, securityPolicyAdded)
+ err := event.Unmarshal(securityPolicyAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-soiwj", "unable to unmarshal oidc config added")
}
diff --git a/internal/repository/instance/secret_generator.go b/internal/repository/instance/secret_generator.go
index d2f25422d5..4af5387c07 100644
--- a/internal/repository/instance/secret_generator.go
+++ b/internal/repository/instance/secret_generator.go
@@ -2,13 +2,11 @@ package instance
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -19,15 +17,15 @@ const (
SecretGeneratorRemovedEventType = instanceEventTypePrefix + secretGeneratorPrefix + "removed"
)
-func NewAddSecretGeneratorTypeUniqueConstraint(generatorType domain.SecretGeneratorType) *eventstore.EventUniqueConstraint {
+func NewAddSecretGeneratorTypeUniqueConstraint(generatorType domain.SecretGeneratorType) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueSecretGeneratorType,
string(generatorType),
"Errors.SecretGenerator.AlreadyExists")
}
-func NewRemoveSecretGeneratorTypeUniqueConstraint(generatorType domain.SecretGeneratorType) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveSecretGeneratorTypeUniqueConstraint(generatorType domain.SecretGeneratorType) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueSecretGeneratorType,
string(generatorType))
}
@@ -71,19 +69,19 @@ func NewSecretGeneratorAddedEvent(
}
}
-func (e *SecretGeneratorAddedEvent) Data() interface{} {
+func (e *SecretGeneratorAddedEvent) Payload() interface{} {
return e
}
-func (e *SecretGeneratorAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddSecretGeneratorTypeUniqueConstraint(e.GeneratorType)}
+func (e *SecretGeneratorAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddSecretGeneratorTypeUniqueConstraint(e.GeneratorType)}
}
-func SecretGeneratorAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecretGeneratorAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
secretGeneratorAdded := &SecretGeneratorAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, secretGeneratorAdded)
+ err := event.Unmarshal(secretGeneratorAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-en9f4", "unable to unmarshal secret generator added")
}
@@ -103,11 +101,11 @@ type SecretGeneratorChangedEvent struct {
IncludeSymbols *bool `json:"includeSymbols,omitempty"`
}
-func (e *SecretGeneratorChangedEvent) Data() interface{} {
+func (e *SecretGeneratorChangedEvent) Payload() interface{} {
return e
}
-func (e *SecretGeneratorChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SecretGeneratorChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -172,12 +170,12 @@ func ChangeSecretGeneratorIncludeSymbols(includeSymbols bool) func(event *Secret
}
}
-func SecretGeneratorChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecretGeneratorChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SecretGeneratorChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-2m09e", "unable to unmarshal secret generator changed")
}
@@ -191,12 +189,12 @@ type SecretGeneratorRemovedEvent struct {
GeneratorType domain.SecretGeneratorType `json:"generatorType"`
}
-func (e *SecretGeneratorRemovedEvent) Data() interface{} {
+func (e *SecretGeneratorRemovedEvent) Payload() interface{} {
return e
}
-func (e *SecretGeneratorRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveSecretGeneratorTypeUniqueConstraint(e.GeneratorType)}
+func (e *SecretGeneratorRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveSecretGeneratorTypeUniqueConstraint(e.GeneratorType)}
}
func NewSecretGeneratorRemovedEvent(
@@ -214,12 +212,12 @@ func NewSecretGeneratorRemovedEvent(
}
}
-func SecretGeneratorRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecretGeneratorRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SecretGeneratorRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-m09ke", "unable to unmarshal secret generator removed")
}
diff --git a/internal/repository/instance/sms.go b/internal/repository/instance/sms.go
index c406ba1f7d..dfa7e83c24 100644
--- a/internal/repository/instance/sms.go
+++ b/internal/repository/instance/sms.go
@@ -2,12 +2,10 @@ package instance
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -51,19 +49,19 @@ func NewSMSConfigTwilioAddedEvent(
}
}
-func (e *SMSConfigTwilioAddedEvent) Data() interface{} {
+func (e *SMSConfigTwilioAddedEvent) Payload() interface{} {
return e
}
-func (e *SMSConfigTwilioAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMSConfigTwilioAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMSConfigTwilioAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMSConfigTwilioAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smsConfigAdded := &SMSConfigTwilioAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smsConfigAdded)
+ err := event.Unmarshal(smsConfigAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-smwiR", "unable to unmarshal sms config twilio added")
}
@@ -116,19 +114,19 @@ func ChangeSMSConfigTwilioSenderNumber(senderNumber string) func(event *SMSConfi
}
}
-func (e *SMSConfigTwilioChangedEvent) Data() interface{} {
+func (e *SMSConfigTwilioChangedEvent) Payload() interface{} {
return e
}
-func (e *SMSConfigTwilioChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMSConfigTwilioChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMSConfigTwilioChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMSConfigTwilioChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smsConfigChanged := &SMSConfigTwilioChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smsConfigChanged)
+ err := event.Unmarshal(smsConfigChanged)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-smwiR", "unable to unmarshal sms config twilio added")
}
@@ -160,19 +158,19 @@ func NewSMSConfigTokenChangedEvent(
}
}
-func (e *SMSConfigTwilioTokenChangedEvent) Data() interface{} {
+func (e *SMSConfigTwilioTokenChangedEvent) Payload() interface{} {
return e
}
-func (e *SMSConfigTwilioTokenChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMSConfigTwilioTokenChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMSConfigTwilioTokenChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMSConfigTwilioTokenChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smtpConfigTokenChagned := &SMSConfigTwilioTokenChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smtpConfigTokenChagned)
+ err := event.Unmarshal(smtpConfigTokenChagned)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-fi9Wf", "unable to unmarshal sms config token changed")
}
@@ -200,19 +198,19 @@ func NewSMSConfigTwilioActivatedEvent(
}
}
-func (e *SMSConfigActivatedEvent) Data() interface{} {
+func (e *SMSConfigActivatedEvent) Payload() interface{} {
return e
}
-func (e *SMSConfigActivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMSConfigActivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMSConfigActivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMSConfigActivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smsConfigActivated := &SMSConfigActivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smsConfigActivated)
+ err := event.Unmarshal(smsConfigActivated)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-dn92f", "unable to unmarshal sms config twilio activated changed")
}
@@ -240,19 +238,19 @@ func NewSMSConfigDeactivatedEvent(
}
}
-func (e *SMSConfigDeactivatedEvent) Data() interface{} {
+func (e *SMSConfigDeactivatedEvent) Payload() interface{} {
return e
}
-func (e *SMSConfigDeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMSConfigDeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMSConfigDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMSConfigDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smsConfigDeactivated := &SMSConfigDeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smsConfigDeactivated)
+ err := event.Unmarshal(smsConfigDeactivated)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-dn92f", "unable to unmarshal sms config twilio deactivated changed")
}
@@ -280,19 +278,19 @@ func NewSMSConfigRemovedEvent(
}
}
-func (e *SMSConfigRemovedEvent) Data() interface{} {
+func (e *SMSConfigRemovedEvent) Payload() interface{} {
return e
}
-func (e *SMSConfigRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMSConfigRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMSConfigRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMSConfigRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smsConfigRemoved := &SMSConfigRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smsConfigRemoved)
+ err := event.Unmarshal(smsConfigRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-99iNF", "unable to unmarshal sms config removed")
}
diff --git a/internal/repository/instance/smtp_config.go b/internal/repository/instance/smtp_config.go
index a8831e4894..eccb18dfee 100644
--- a/internal/repository/instance/smtp_config.go
+++ b/internal/repository/instance/smtp_config.go
@@ -2,12 +2,10 @@ package instance
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -57,19 +55,19 @@ func NewSMTPConfigAddedEvent(
}
}
-func (e *SMTPConfigAddedEvent) Data() interface{} {
+func (e *SMTPConfigAddedEvent) Payload() interface{} {
return e
}
-func (e *SMTPConfigAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMTPConfigAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMTPConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMTPConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smtpConfigAdded := &SMTPConfigAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smtpConfigAdded)
+ err := event.Unmarshal(smtpConfigAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-39fks", "unable to unmarshal smtp config added")
}
@@ -88,11 +86,11 @@ type SMTPConfigChangedEvent struct {
User *string `json:"user,omitempty"`
}
-func (e *SMTPConfigChangedEvent) Data() interface{} {
+func (e *SMTPConfigChangedEvent) Payload() interface{} {
return e
}
-func (e *SMTPConfigChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMTPConfigChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -155,12 +153,12 @@ func ChangeSMTPConfigSMTPUser(smtpUser string) func(event *SMTPConfigChangedEven
}
}
-func SMTPConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMTPConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SMTPConfigChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-m09oo", "unable to unmarshal smtp changed")
}
@@ -189,19 +187,19 @@ func NewSMTPConfigPasswordChangedEvent(
}
}
-func (e *SMTPConfigPasswordChangedEvent) Data() interface{} {
+func (e *SMTPConfigPasswordChangedEvent) Payload() interface{} {
return e
}
-func (e *SMTPConfigPasswordChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMTPConfigPasswordChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMTPConfigPasswordChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMTPConfigPasswordChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smtpConfigPasswordChagned := &SMTPConfigPasswordChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smtpConfigPasswordChagned)
+ err := event.Unmarshal(smtpConfigPasswordChagned)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-99iNF", "unable to unmarshal smtp config password changed")
}
@@ -226,19 +224,19 @@ func NewSMTPConfigRemovedEvent(
}
}
-func (e *SMTPConfigRemovedEvent) Data() interface{} {
+func (e *SMTPConfigRemovedEvent) Payload() interface{} {
return e
}
-func (e *SMTPConfigRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SMTPConfigRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
-func SMTPConfigRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SMTPConfigRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
smtpConfigRemoved := &SMTPConfigRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, smtpConfigRemoved)
+ err := event.Unmarshal(smtpConfigRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "IAM-DVw1s", "unable to unmarshal smtp config removed")
}
diff --git a/internal/repository/keypair/certificate.go b/internal/repository/keypair/certificate.go
index de3ffabb75..9a49ccc7d0 100644
--- a/internal/repository/keypair/certificate.go
+++ b/internal/repository/keypair/certificate.go
@@ -2,13 +2,11 @@ package keypair
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -21,11 +19,11 @@ type AddedCertificateEvent struct {
Certificate *Key `json:"certificate"`
}
-func (e *AddedCertificateEvent) Data() interface{} {
+func (e *AddedCertificateEvent) Payload() interface{} {
return e
}
-func (e *AddedCertificateEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AddedCertificateEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -47,12 +45,12 @@ func NewAddedCertificateEvent(
}
}
-func AddedCertificateEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AddedCertificateEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AddedCertificateEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "KEY-4n9vs", "unable to unmarshal certificate added")
}
diff --git a/internal/repository/keypair/key_pair.go b/internal/repository/keypair/key_pair.go
index 35b58e5d79..99b57555d5 100644
--- a/internal/repository/keypair/key_pair.go
+++ b/internal/repository/keypair/key_pair.go
@@ -2,14 +2,12 @@ package keypair
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -31,11 +29,11 @@ type Key struct {
Expiry time.Time `json:"expiry"`
}
-func (e *AddedEvent) Data() interface{} {
+func (e *AddedEvent) Payload() interface{} {
return e
}
-func (e *AddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -67,12 +65,12 @@ func NewAddedEvent(
}
}
-func AddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &AddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "KEY-4n8vs", "unable to unmarshal key pair added")
}
diff --git a/internal/repository/member/events.go b/internal/repository/member/events.go
index e19f99f6a4..3ead301f0c 100644
--- a/internal/repository/member/events.go
+++ b/internal/repository/member/events.go
@@ -1,12 +1,10 @@
package member
import (
- "encoding/json"
"fmt"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -17,15 +15,15 @@ const (
CascadeRemovedEventType = "member.cascade.removed"
)
-func NewAddMemberUniqueConstraint(aggregateID, userID string) *eventstore.EventUniqueConstraint {
+func NewAddMemberUniqueConstraint(aggregateID, userID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueMember,
fmt.Sprintf("%s:%s", aggregateID, userID),
"Errors.Member.AlreadyExists")
}
-func NewRemoveMemberUniqueConstraint(aggregateID, userID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveMemberUniqueConstraint(aggregateID, userID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueMember,
fmt.Sprintf("%s:%s", aggregateID, userID),
)
@@ -38,12 +36,12 @@ type MemberAddedEvent struct {
UserID string `json:"userId"`
}
-func (e *MemberAddedEvent) Data() interface{} {
+func (e *MemberAddedEvent) Payload() interface{} {
return e
}
-func (e *MemberAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddMemberUniqueConstraint(e.Aggregate().ID, e.UserID)}
+func (e *MemberAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddMemberUniqueConstraint(e.Aggregate().ID, e.UserID)}
}
func NewMemberAddedEvent(
@@ -59,12 +57,12 @@ func NewMemberAddedEvent(
}
}
-func MemberAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MemberAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-puqv4", "unable to unmarshal label policy")
}
@@ -79,11 +77,11 @@ type MemberChangedEvent struct {
UserID string `json:"userId,omitempty"`
}
-func (e *MemberChangedEvent) Data() interface{} {
+func (e *MemberChangedEvent) Payload() interface{} {
return e
}
-func (e *MemberChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MemberChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -99,12 +97,12 @@ func NewMemberChangedEvent(
}
}
-func ChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MemberChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-puqv4", "unable to unmarshal label policy")
}
@@ -118,12 +116,12 @@ type MemberRemovedEvent struct {
UserID string `json:"userId"`
}
-func (e *MemberRemovedEvent) Data() interface{} {
+func (e *MemberRemovedEvent) Payload() interface{} {
return e
}
-func (e *MemberRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveMemberUniqueConstraint(e.Aggregate().ID, e.UserID)}
+func (e *MemberRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveMemberUniqueConstraint(e.Aggregate().ID, e.UserID)}
}
func NewRemovedEvent(
@@ -137,12 +135,12 @@ func NewRemovedEvent(
}
}
-func RemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MemberRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "MEMBER-Ep4ip", "unable to unmarshal label policy")
}
@@ -156,12 +154,12 @@ type MemberCascadeRemovedEvent struct {
UserID string `json:"userId"`
}
-func (e *MemberCascadeRemovedEvent) Data() interface{} {
+func (e *MemberCascadeRemovedEvent) Payload() interface{} {
return e
}
-func (e *MemberCascadeRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveMemberUniqueConstraint(e.Aggregate().ID, e.UserID)}
+func (e *MemberCascadeRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveMemberUniqueConstraint(e.Aggregate().ID, e.UserID)}
}
func NewCascadeRemovedEvent(
@@ -175,12 +173,12 @@ func NewCascadeRemovedEvent(
}
}
-func CascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MemberCascadeRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "MEMBER-3j9sf", "unable to unmarshal label policy")
}
diff --git a/internal/repository/metadata/metadata.go b/internal/repository/metadata/metadata.go
index 20b150c4ca..7026badb1a 100644
--- a/internal/repository/metadata/metadata.go
+++ b/internal/repository/metadata/metadata.go
@@ -1,11 +1,8 @@
package metadata
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -21,11 +18,11 @@ type SetEvent struct {
Value []byte `json:"value"`
}
-func (e *SetEvent) Data() interface{} {
+func (e *SetEvent) Payload() interface{} {
return e
}
-func (e *SetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -41,12 +38,12 @@ func NewSetEvent(
}
}
-func SetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "META-3n9fs", "unable to unmarshal metadata set")
}
@@ -60,11 +57,11 @@ type RemovedEvent struct {
Key string `json:"key"`
}
-func (e *RemovedEvent) Data() interface{} {
+func (e *RemovedEvent) Payload() interface{} {
return e
}
-func (e *RemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -79,12 +76,12 @@ func NewRemovedEvent(
}
}
-func RemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &RemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "META-2m99f", "unable to unmarshal metadata removed")
}
@@ -96,11 +93,11 @@ type RemovedAllEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *RemovedAllEvent) Data() interface{} {
+func (e *RemovedAllEvent) Payload() interface{} {
return nil
}
-func (e *RemovedAllEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RemovedAllEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -113,7 +110,7 @@ func NewRemovedAllEvent(
}
}
-func RemovedAllEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RemovedAllEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &RemovedAllEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/milestone/events.go b/internal/repository/milestone/events.go
index 5ec2f96f93..efd25949b1 100644
--- a/internal/repository/milestone/events.go
+++ b/internal/repository/milestone/events.go
@@ -11,6 +11,8 @@ const (
PushedEventType = eventTypePrefix + "pushed"
)
+var _ eventstore.Command = (*PushedEvent)(nil)
+
type PushedEvent struct {
*eventstore.BaseEvent `json:"-"`
MilestoneType Type `json:"type"`
@@ -19,11 +21,12 @@ type PushedEvent struct {
Endpoints []string `json:"endpoints"`
}
-func (p *PushedEvent) Data() interface{} {
+// Payload implements eventstore.Command.
+func (p *PushedEvent) Payload() any {
return p
}
-func (p *PushedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (p *PushedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/repository/oidcsession/oidc_session.go b/internal/repository/oidcsession/oidc_session.go
index 8887b61926..4993a972ea 100644
--- a/internal/repository/oidcsession/oidc_session.go
+++ b/internal/repository/oidcsession/oidc_session.go
@@ -30,11 +30,11 @@ type AddedEvent struct {
AuthTime time.Time `json:"authTime"`
}
-func (e *AddedEvent) Data() interface{} {
+func (e *AddedEvent) Payload() interface{} {
return e
}
-func (e *AddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -76,11 +76,11 @@ type AccessTokenAddedEvent struct {
Lifetime time.Duration `json:"lifetime"`
}
-func (e *AccessTokenAddedEvent) Data() interface{} {
+func (e *AccessTokenAddedEvent) Payload() interface{} {
return e
}
-func (e *AccessTokenAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AccessTokenAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -111,11 +111,11 @@ type AccessTokenRevokedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *AccessTokenRevokedEvent) Data() interface{} {
+func (e *AccessTokenRevokedEvent) Payload() interface{} {
return e
}
-func (e *AccessTokenRevokedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AccessTokenRevokedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -144,11 +144,11 @@ type RefreshTokenAddedEvent struct {
IdleLifetime time.Duration `json:"idleLifetime"`
}
-func (e *RefreshTokenAddedEvent) Data() interface{} {
+func (e *RefreshTokenAddedEvent) Payload() interface{} {
return e
}
-func (e *RefreshTokenAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RefreshTokenAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -182,11 +182,11 @@ type RefreshTokenRenewedEvent struct {
IdleLifetime time.Duration `json:"idleLifetime"`
}
-func (e *RefreshTokenRenewedEvent) Data() interface{} {
+func (e *RefreshTokenRenewedEvent) Payload() interface{} {
return e
}
-func (e *RefreshTokenRenewedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RefreshTokenRenewedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -215,11 +215,11 @@ type RefreshTokenRevokedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *RefreshTokenRevokedEvent) Data() interface{} {
+func (e *RefreshTokenRevokedEvent) Payload() interface{} {
return e
}
-func (e *RefreshTokenRevokedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RefreshTokenRevokedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/repository/org/custom_text.go b/internal/repository/org/custom_text.go
index 2e12d5aacc..7e6768ee0c 100644
--- a/internal/repository/org/custom_text.go
+++ b/internal/repository/org/custom_text.go
@@ -6,8 +6,6 @@ import (
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -39,7 +37,7 @@ func NewCustomTextSetEvent(
}
}
-func CustomTextSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.CustomTextSetEventMapper(event)
if err != nil {
return nil, err
@@ -69,7 +67,7 @@ func NewCustomTextRemovedEvent(
}
}
-func CustomTextRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.CustomTextRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -97,7 +95,7 @@ func NewCustomTextTemplateRemovedEvent(
}
}
-func CustomTextTemplateRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextTemplateRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.CustomTextTemplateRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/domain.go b/internal/repository/org/domain.go
index 56515dc795..3489642121 100644
--- a/internal/repository/org/domain.go
+++ b/internal/repository/org/domain.go
@@ -2,14 +2,11 @@ package org
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -23,15 +20,15 @@ const (
OrgDomainRemovedEventType = domainEventPrefix + "removed"
)
-func NewAddOrgDomainUniqueConstraint(orgDomain string) *eventstore.EventUniqueConstraint {
+func NewAddOrgDomainUniqueConstraint(orgDomain string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueOrgDomain,
orgDomain,
"Errors.Org.Domain.AlreadyExists")
}
-func NewRemoveOrgDomainUniqueConstraint(orgDomain string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveOrgDomainUniqueConstraint(orgDomain string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueOrgDomain,
orgDomain)
}
@@ -42,11 +39,11 @@ type DomainAddedEvent struct {
Domain string `json:"domain,omitempty"`
}
-func (e *DomainAddedEvent) Data() interface{} {
+func (e *DomainAddedEvent) Payload() interface{} {
return e
}
-func (e *DomainAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -61,11 +58,11 @@ func NewDomainAddedEvent(ctx context.Context, aggregate *eventstore.Aggregate, d
}
}
-func DomainAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgDomainAdded := &DomainAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgDomainAdded)
+ err := event.Unmarshal(orgDomainAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-GBr52", "unable to unmarshal org domain added")
}
@@ -81,11 +78,11 @@ type DomainVerificationAddedEvent struct {
ValidationCode *crypto.CryptoValue `json:"validationCode,omitempty"`
}
-func (e *DomainVerificationAddedEvent) Data() interface{} {
+func (e *DomainVerificationAddedEvent) Payload() interface{} {
return e
}
-func (e *DomainVerificationAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainVerificationAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -107,11 +104,11 @@ func NewDomainVerificationAddedEvent(
}
}
-func DomainVerificationAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainVerificationAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgDomainVerificationAdded := &DomainVerificationAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgDomainVerificationAdded)
+ err := event.Unmarshal(orgDomainVerificationAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-NRN32", "unable to unmarshal org domain verification added")
}
@@ -125,11 +122,11 @@ type DomainVerificationFailedEvent struct {
Domain string `json:"domain,omitempty"`
}
-func (e *DomainVerificationFailedEvent) Data() interface{} {
+func (e *DomainVerificationFailedEvent) Payload() interface{} {
return e
}
-func (e *DomainVerificationFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainVerificationFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -144,11 +141,11 @@ func NewDomainVerificationFailedEvent(ctx context.Context, aggregate *eventstore
}
}
-func DomainVerificationFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainVerificationFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgDomainVerificationFailed := &DomainVerificationFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgDomainVerificationFailed)
+ err := event.Unmarshal(orgDomainVerificationFailed)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-Bhm37", "unable to unmarshal org domain verification failed")
}
@@ -162,12 +159,12 @@ type DomainVerifiedEvent struct {
Domain string `json:"domain,omitempty"`
}
-func (e *DomainVerifiedEvent) Data() interface{} {
+func (e *DomainVerifiedEvent) Payload() interface{} {
return e
}
-func (e *DomainVerifiedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddOrgDomainUniqueConstraint(e.Domain)}
+func (e *DomainVerifiedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddOrgDomainUniqueConstraint(e.Domain)}
}
func NewDomainVerifiedEvent(ctx context.Context, aggregate *eventstore.Aggregate, domain string) *DomainVerifiedEvent {
@@ -181,11 +178,11 @@ func NewDomainVerifiedEvent(ctx context.Context, aggregate *eventstore.Aggregate
}
}
-func DomainVerifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainVerifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgDomainVerified := &DomainVerifiedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgDomainVerified)
+ err := event.Unmarshal(orgDomainVerified)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-BFSwt", "unable to unmarshal org domain verified")
}
@@ -199,11 +196,11 @@ type DomainPrimarySetEvent struct {
Domain string `json:"domain,omitempty"`
}
-func (e *DomainPrimarySetEvent) Data() interface{} {
+func (e *DomainPrimarySetEvent) Payload() interface{} {
return e
}
-func (e *DomainPrimarySetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainPrimarySetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -218,11 +215,11 @@ func NewDomainPrimarySetEvent(ctx context.Context, aggregate *eventstore.Aggrega
}
}
-func DomainPrimarySetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPrimarySetEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgDomainPrimarySet := &DomainPrimarySetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgDomainPrimarySet)
+ err := event.Unmarshal(orgDomainPrimarySet)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-N5787", "unable to unmarshal org domain primary set")
}
@@ -237,15 +234,15 @@ type DomainRemovedEvent struct {
isVerified bool
}
-func (e *DomainRemovedEvent) Data() interface{} {
+func (e *DomainRemovedEvent) Payload() interface{} {
return e
}
-func (e *DomainRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
if !e.isVerified {
return nil
}
- return []*eventstore.EventUniqueConstraint{NewRemoveOrgDomainUniqueConstraint(e.Domain)}
+ return []*eventstore.UniqueConstraint{NewRemoveOrgDomainUniqueConstraint(e.Domain)}
}
func NewDomainRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregate, domain string, verified bool) *DomainRemovedEvent {
@@ -260,11 +257,11 @@ func NewDomainRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregate,
}
}
-func DomainRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgDomainRemoved := &DomainRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgDomainRemoved)
+ err := event.Unmarshal(orgDomainRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-BngB2", "unable to unmarshal org domain removed")
}
diff --git a/internal/repository/org/flow.go b/internal/repository/org/flow.go
index 48a8c360b4..cccb6d8e1d 100644
--- a/internal/repository/org/flow.go
+++ b/internal/repository/org/flow.go
@@ -5,7 +5,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/flow"
)
@@ -38,7 +37,7 @@ func NewTriggerActionsSetEvent(
}
}
-func TriggerActionsSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func TriggerActionsSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := flow.TriggerActionsSetEventMapper(event)
if err != nil {
return nil, err
@@ -68,7 +67,7 @@ func NewTriggerActionsCascadeRemovedEvent(
}
}
-func TriggerActionsCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func TriggerActionsCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := flow.TriggerActionsCascadeRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -96,7 +95,7 @@ func NewFlowClearedEvent(
}
}
-func FlowClearedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func FlowClearedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := flow.FlowClearedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/idp.go b/internal/repository/org/idp.go
index ef590df3fb..5f28d44811 100644
--- a/internal/repository/org/idp.go
+++ b/internal/repository/org/idp.go
@@ -6,7 +6,6 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/idp"
)
@@ -80,7 +79,7 @@ func NewOAuthIDPAddedEvent(
}
}
-func OAuthIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OAuthIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OAuthIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -115,7 +114,7 @@ func NewOAuthIDPChangedEvent(
return &OAuthIDPChangedEvent{OAuthIDPChangedEvent: *changedEvent}, nil
}
-func OAuthIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OAuthIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OAuthIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -160,7 +159,7 @@ func NewOIDCIDPAddedEvent(
}
}
-func OIDCIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -195,7 +194,7 @@ func NewOIDCIDPChangedEvent(
return &OIDCIDPChangedEvent{OIDCIDPChangedEvent: *changedEvent}, nil
}
-func OIDCIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -239,7 +238,7 @@ func NewOIDCIDPMigratedAzureADEvent(
}
}
-func OIDCIDPMigratedAzureADEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPMigratedAzureADEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPMigratedAzureADEventMapper(event)
if err != nil {
return nil, err
@@ -279,7 +278,7 @@ func NewOIDCIDPMigratedGoogleEvent(
}
}
-func OIDCIDPMigratedGoogleEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCIDPMigratedGoogleEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.OIDCIDPMigratedGoogleEventMapper(event)
if err != nil {
return nil, err
@@ -322,7 +321,7 @@ func NewJWTIDPAddedEvent(
}
}
-func JWTIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.JWTIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -357,7 +356,7 @@ func NewJWTIDPChangedEvent(
return &JWTIDPChangedEvent{JWTIDPChangedEvent: *changedEvent}, nil
}
-func JWTIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func JWTIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.JWTIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -402,7 +401,7 @@ func NewAzureADIDPAddedEvent(
}
}
-func AzureADIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AzureADIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AzureADIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -437,7 +436,7 @@ func NewAzureADIDPChangedEvent(
return &AzureADIDPChangedEvent{AzureADIDPChangedEvent: *changedEvent}, nil
}
-func AzureADIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AzureADIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AzureADIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -478,7 +477,7 @@ func NewGitHubIDPAddedEvent(
}
}
-func GitHubIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -513,7 +512,7 @@ func NewGitHubIDPChangedEvent(
return &GitHubIDPChangedEvent{GitHubIDPChangedEvent: *changedEvent}, nil
}
-func GitHubIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -560,7 +559,7 @@ func NewGitHubEnterpriseIDPAddedEvent(
}
}
-func GitHubEnterpriseIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubEnterpriseIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubEnterpriseIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -595,7 +594,7 @@ func NewGitHubEnterpriseIDPChangedEvent(
return &GitHubEnterpriseIDPChangedEvent{GitHubEnterpriseIDPChangedEvent: *changedEvent}, nil
}
-func GitHubEnterpriseIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitHubEnterpriseIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitHubEnterpriseIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -636,7 +635,7 @@ func NewGitLabIDPAddedEvent(
}
}
-func GitLabIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -671,7 +670,7 @@ func NewGitLabIDPChangedEvent(
return &GitLabIDPChangedEvent{GitLabIDPChangedEvent: *changedEvent}, nil
}
-func GitLabIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -714,7 +713,7 @@ func NewGitLabSelfHostedIDPAddedEvent(
}
}
-func GitLabSelfHostedIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabSelfHostedIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabSelfHostedIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -749,7 +748,7 @@ func NewGitLabSelfHostedIDPChangedEvent(
return &GitLabSelfHostedIDPChangedEvent{GitLabSelfHostedIDPChangedEvent: *changedEvent}, nil
}
-func GitLabSelfHostedIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GitLabSelfHostedIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GitLabSelfHostedIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -790,7 +789,7 @@ func NewGoogleIDPAddedEvent(
}
}
-func GoogleIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GoogleIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GoogleIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -825,7 +824,7 @@ func NewGoogleIDPChangedEvent(
return &GoogleIDPChangedEvent{GoogleIDPChangedEvent: *changedEvent}, nil
}
-func GoogleIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GoogleIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.GoogleIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -880,7 +879,7 @@ func NewLDAPIDPAddedEvent(
}
}
-func LDAPIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LDAPIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.LDAPIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -915,7 +914,7 @@ func NewLDAPIDPChangedEvent(
return &LDAPIDPChangedEvent{LDAPIDPChangedEvent: *changedEvent}, nil
}
-func LDAPIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LDAPIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.LDAPIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -960,7 +959,7 @@ func NewAppleIDPAddedEvent(
}
}
-func AppleIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AppleIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AppleIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -995,7 +994,7 @@ func NewAppleIDPChangedEvent(
return &AppleIDPChangedEvent{AppleIDPChangedEvent: *changedEvent}, nil
}
-func AppleIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AppleIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.AppleIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -1040,7 +1039,7 @@ func NewSAMLIDPAddedEvent(
}
}
-func SAMLIDPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLIDPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.SAMLIDPAddedEventMapper(event)
if err != nil {
return nil, err
@@ -1074,7 +1073,7 @@ func NewSAMLIDPChangedEvent(
return &SAMLIDPChangedEvent{SAMLIDPChangedEvent: *changedEvent}, nil
}
-func SAMLIDPChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLIDPChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.SAMLIDPChangedEventMapper(event)
if err != nil {
return nil, err
@@ -1104,11 +1103,11 @@ func NewIDPRemovedEvent(
}
}
-func (e *IDPRemovedEvent) Data() interface{} {
+func (e *IDPRemovedEvent) Payload() interface{} {
return e
}
-func IDPRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idp.RemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/idp_config.go b/internal/repository/org/idp_config.go
index 2596cd9419..d6e9d5930c 100644
--- a/internal/repository/org/idp_config.go
+++ b/internal/repository/org/idp_config.go
@@ -3,10 +3,8 @@ package org
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
)
@@ -48,7 +46,7 @@ func NewIDPConfigAddedEvent(
}
}
-func IDPConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigAddedEventMapper(event)
if err != nil {
return nil, err
@@ -82,7 +80,7 @@ func NewIDPConfigChangedEvent(
return &IDPConfigChangedEvent{IDPConfigChangedEvent: *changeEvent}, nil
}
-func IDPConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigChangedEventMapper(event)
if err != nil {
return nil, err
@@ -115,7 +113,7 @@ func NewIDPConfigRemovedEvent(
}
}
-func IDPConfigRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -146,7 +144,7 @@ func NewIDPConfigDeactivatedEvent(
}
}
-func IDPConfigDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigDeactivatedEventMapper(event)
if err != nil {
return nil, err
@@ -177,7 +175,7 @@ func NewIDPConfigReactivatedEvent(
}
}
-func IDPConfigReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPConfigReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.IDPConfigReactivatedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/idp_jwt_config.go b/internal/repository/org/idp_jwt_config.go
index 866feacc52..ad5378d6aa 100644
--- a/internal/repository/org/idp_jwt_config.go
+++ b/internal/repository/org/idp_jwt_config.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
)
@@ -44,7 +42,7 @@ func NewIDPJWTConfigAddedEvent(
}
}
-func IDPJWTConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPJWTConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.JWTConfigAddedEventMapper(event)
if err != nil {
return nil, err
@@ -77,7 +75,7 @@ func NewIDPJWTConfigChangedEvent(
return &IDPJWTConfigChangedEvent{JWTConfigChangedEvent: *changeEvent}, nil
}
-func IDPJWTConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPJWTConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.JWTConfigChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/idp_oidc_config.go b/internal/repository/org/idp_oidc_config.go
index 45a21332ef..70a0421b04 100644
--- a/internal/repository/org/idp_oidc_config.go
+++ b/internal/repository/org/idp_oidc_config.go
@@ -3,11 +3,9 @@ package org
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/idpconfig"
)
@@ -54,7 +52,7 @@ func NewIDPOIDCConfigAddedEvent(
}
}
-func IDPOIDCConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPOIDCConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.OIDCConfigAddedEventMapper(event)
if err != nil {
return nil, err
@@ -87,7 +85,7 @@ func NewIDPOIDCConfigChangedEvent(
return &IDPOIDCConfigChangedEvent{OIDCConfigChangedEvent: *changeEvent}, nil
}
-func IDPOIDCConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IDPOIDCConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := idpconfig.OIDCConfigChangedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/member.go b/internal/repository/org/member.go
index 20d909bf93..81a4d5850f 100644
--- a/internal/repository/org/member.go
+++ b/internal/repository/org/member.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/member"
)
@@ -39,7 +37,7 @@ func NewMemberAddedEvent(
}
}
-func MemberAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.MemberAddedEventMapper(event)
if err != nil {
return nil, err
@@ -72,7 +70,7 @@ func NewMemberChangedEvent(
}
}
-func MemberChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.ChangedEventMapper(event)
if err != nil {
return nil, err
@@ -102,7 +100,7 @@ func NewMemberRemovedEvent(
}
}
-func MemberRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -132,7 +130,7 @@ func NewMemberCascadeRemovedEvent(
}
}
-func MemberCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.CascadeRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/metadata.go b/internal/repository/org/metadata.go
index 04bc64f89b..ee92c6f5cb 100644
--- a/internal/repository/org/metadata.go
+++ b/internal/repository/org/metadata.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/metadata"
)
@@ -30,7 +29,7 @@ func NewMetadataSetEvent(ctx context.Context, aggregate *eventstore.Aggregate, k
}
}
-func MetadataSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MetadataSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := metadata.SetEventMapper(event)
if err != nil {
return nil, err
@@ -54,7 +53,7 @@ func NewMetadataRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregat
}
}
-func MetadataRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MetadataRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := metadata.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -78,7 +77,7 @@ func NewMetadataRemovedAllEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func MetadataRemovedAllEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MetadataRemovedAllEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := metadata.RemovedAllEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/org.go b/internal/repository/org/org.go
index 7657bef49c..66bbc59a44 100644
--- a/internal/repository/org/org.go
+++ b/internal/repository/org/org.go
@@ -2,12 +2,10 @@ package org
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/project"
"github.com/zitadel/zitadel/internal/repository/user"
)
@@ -21,15 +19,15 @@ const (
OrgRemovedEventType = orgEventTypePrefix + "removed"
)
-func NewAddOrgNameUniqueConstraint(orgName string) *eventstore.EventUniqueConstraint {
+func NewAddOrgNameUniqueConstraint(orgName string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
uniqueOrgname,
orgName,
"Errors.Org.AlreadyExists")
}
-func NewRemoveOrgNameUniqueConstraint(orgName string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveOrgNameUniqueConstraint(orgName string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
uniqueOrgname,
orgName)
}
@@ -40,12 +38,12 @@ type OrgAddedEvent struct {
Name string `json:"name,omitempty"`
}
-func (e *OrgAddedEvent) Data() interface{} {
+func (e *OrgAddedEvent) Payload() interface{} {
return e
}
-func (e *OrgAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddOrgNameUniqueConstraint(e.Name)}
+func (e *OrgAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddOrgNameUniqueConstraint(e.Name)}
}
func NewOrgAddedEvent(ctx context.Context, aggregate *eventstore.Aggregate, name string) *OrgAddedEvent {
@@ -59,11 +57,11 @@ func NewOrgAddedEvent(ctx context.Context, aggregate *eventstore.Aggregate, name
}
}
-func OrgAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OrgAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgAdded := &OrgAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgAdded)
+ err := event.Unmarshal(orgAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-Bren2", "unable to unmarshal org added")
}
@@ -78,12 +76,12 @@ type OrgChangedEvent struct {
oldName string `json:"-"`
}
-func (e *OrgChangedEvent) Data() interface{} {
+func (e *OrgChangedEvent) Payload() interface{} {
return e
}
-func (e *OrgChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{
+func (e *OrgChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{
NewRemoveOrgNameUniqueConstraint(e.oldName),
NewAddOrgNameUniqueConstraint(e.Name),
}
@@ -101,11 +99,11 @@ func NewOrgChangedEvent(ctx context.Context, aggregate *eventstore.Aggregate, ol
}
}
-func OrgChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OrgChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
orgChanged := &OrgChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, orgChanged)
+ err := event.Unmarshal(orgChanged)
if err != nil {
return nil, errors.ThrowInternal(err, "ORG-Bren2", "unable to unmarshal org added")
}
@@ -117,11 +115,11 @@ type OrgDeactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *OrgDeactivatedEvent) Data() interface{} {
+func (e *OrgDeactivatedEvent) Payload() interface{} {
return e
}
-func (e *OrgDeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OrgDeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -135,7 +133,7 @@ func NewOrgDeactivatedEvent(ctx context.Context, aggregate *eventstore.Aggregate
}
}
-func OrgDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OrgDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &OrgDeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -145,11 +143,11 @@ type OrgReactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *OrgReactivatedEvent) Data() interface{} {
+func (e *OrgReactivatedEvent) Payload() interface{} {
return e
}
-func (e *OrgReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OrgReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -163,7 +161,7 @@ func NewOrgReactivatedEvent(ctx context.Context, aggregate *eventstore.Aggregate
}
}
-func OrgReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OrgReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &OrgReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -179,12 +177,12 @@ type OrgRemovedEvent struct {
samlEntityIDs []string
}
-func (e *OrgRemovedEvent) Data() interface{} {
+func (e *OrgRemovedEvent) Payload() interface{} {
return nil
}
-func (e *OrgRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- constraints := []*eventstore.EventUniqueConstraint{
+func (e *OrgRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ constraints := []*eventstore.UniqueConstraint{
NewRemoveOrgNameUniqueConstraint(e.name),
}
for _, name := range e.usernames {
@@ -218,7 +216,7 @@ func NewOrgRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregate, na
}
}
-func OrgRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OrgRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &OrgRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/org/policy_domain.go b/internal/repository/org/policy_domain.go
index 18191533c2..352a9e5262 100644
--- a/internal/repository/org/policy_domain.go
+++ b/internal/repository/org/policy_domain.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -39,7 +37,7 @@ func NewDomainPolicyAddedEvent(
}
}
-func DomainPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.DomainPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -70,7 +68,7 @@ func NewDomainPolicyChangedEvent(
return &DomainPolicyChangedEvent{DomainPolicyChangedEvent: *changedEvent}, nil
}
-func DomainPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.DomainPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -97,7 +95,7 @@ func NewDomainPolicyRemovedEvent(
}
}
-func DomainPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.DomainPolicyRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_label.go b/internal/repository/org/policy_label.go
index 5a17de6ed0..2ca2c874ba 100644
--- a/internal/repository/org/policy_label.go
+++ b/internal/repository/org/policy_label.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -68,7 +67,7 @@ func NewLabelPolicyAddedEvent(
}
}
-func LabelPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -99,7 +98,7 @@ func NewLabelPolicyChangedEvent(
return &LabelPolicyChangedEvent{LabelPolicyChangedEvent: *changedEvent}, nil
}
-func LabelPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -126,7 +125,7 @@ func NewLabelPolicyRemovedEvent(
}
}
-func LabelPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -153,7 +152,7 @@ func NewLabelPolicyActivatedEvent(
}
}
-func LabelPolicyActivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyActivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyActivatedEventMapper(event)
if err != nil {
return nil, err
@@ -182,7 +181,7 @@ func NewLabelPolicyLogoAddedEvent(
}
}
-func LabelPolicyLogoAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoAddedEventMapper(event)
if err != nil {
return nil, err
@@ -211,7 +210,7 @@ func NewLabelPolicyLogoRemovedEvent(
}
}
-func LabelPolicyLogoRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -240,7 +239,7 @@ func NewLabelPolicyIconAddedEvent(
}
}
-func LabelPolicyIconAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconAddedEventMapper(event)
if err != nil {
return nil, err
@@ -269,7 +268,7 @@ func NewLabelPolicyIconRemovedEvent(
}
}
-func LabelPolicyIconRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -298,7 +297,7 @@ func NewLabelPolicyLogoDarkAddedEvent(
}
}
-func LabelPolicyLogoDarkAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoDarkAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoDarkAddedEventMapper(event)
if err != nil {
return nil, err
@@ -327,7 +326,7 @@ func NewLabelPolicyLogoDarkRemovedEvent(
}
}
-func LabelPolicyLogoDarkRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoDarkRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyLogoDarkRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -356,7 +355,7 @@ func NewLabelPolicyIconDarkAddedEvent(
}
}
-func LabelPolicyIconDarkAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconDarkAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconDarkAddedEventMapper(event)
if err != nil {
return nil, err
@@ -385,7 +384,7 @@ func NewLabelPolicyIconDarkRemovedEvent(
}
}
-func LabelPolicyIconDarkRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconDarkRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyIconDarkRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -414,7 +413,7 @@ func NewLabelPolicyFontAddedEvent(
}
}
-func LabelPolicyFontAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyFontAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyFontAddedEventMapper(event)
if err != nil {
return nil, err
@@ -443,7 +442,7 @@ func NewLabelPolicyFontRemovedEvent(
}
}
-func LabelPolicyFontRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyFontRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyFontRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -456,11 +455,11 @@ type LabelPolicyAssetsRemovedEvent struct {
policy.LabelPolicyAssetsRemovedEvent
}
-func (e *LabelPolicyAssetsRemovedEvent) Data() interface{} {
+func (e *LabelPolicyAssetsRemovedEvent) Payload() interface{} {
return nil
}
-func (e *LabelPolicyAssetsRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyAssetsRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -478,7 +477,7 @@ func NewLabelPolicyAssetsRemovedEvent(
}
}
-func LabelPolicyAssetsRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyAssetsRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LabelPolicyAssetsRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_login.go b/internal/repository/org/policy_login.go
index 95e38ca92f..af37017913 100644
--- a/internal/repository/org/policy_login.go
+++ b/internal/repository/org/policy_login.go
@@ -4,10 +4,8 @@ import (
"context"
"time"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -69,7 +67,7 @@ func NewLoginPolicyAddedEvent(
}
}
-func LoginPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LoginPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -100,7 +98,7 @@ func NewLoginPolicyChangedEvent(
return &LoginPolicyChangedEvent{LoginPolicyChangedEvent: *changedEvent}, nil
}
-func LoginPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LoginPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -127,7 +125,7 @@ func NewLoginPolicyRemovedEvent(
}
}
-func LoginPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LoginPolicyRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_login_factors.go b/internal/repository/org/policy_login_factors.go
index 568c3ed8c7..c2322b9d29 100644
--- a/internal/repository/org/policy_login_factors.go
+++ b/internal/repository/org/policy_login_factors.go
@@ -3,10 +3,8 @@ package org
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -37,7 +35,7 @@ func NewLoginPolicySecondFactorAddedEvent(
}
}
-func SecondFactorAddedEventEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecondFactorAddedEventEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.SecondFactorAddedEventMapper(event)
if err != nil {
return nil, err
@@ -68,7 +66,7 @@ func NewLoginPolicySecondFactorRemovedEvent(
}
}
-func SecondFactorRemovedEventEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecondFactorRemovedEventEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.SecondFactorRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -98,7 +96,7 @@ func NewLoginPolicyMultiFactorAddedEvent(
}
}
-func MultiFactorAddedEventEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MultiFactorAddedEventEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MultiFactorAddedEventMapper(event)
if err != nil {
return nil, err
@@ -129,7 +127,7 @@ func NewLoginPolicyMultiFactorRemovedEvent(
}
}
-func MultiFactorRemovedEventEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MultiFactorRemovedEventEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MultiFactorRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_login_identity_provider.go b/internal/repository/org/policy_login_identity_provider.go
index ea963a99fc..13f8bc35be 100644
--- a/internal/repository/org/policy_login_identity_provider.go
+++ b/internal/repository/org/policy_login_identity_provider.go
@@ -3,10 +3,8 @@ package org
import (
"context"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -38,7 +36,7 @@ func NewIdentityProviderAddedEvent(
}
}
-func IdentityProviderAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.IdentityProviderAddedEventMapper(event)
if err != nil {
return nil, err
@@ -68,7 +66,7 @@ func NewIdentityProviderRemovedEvent(
}
}
-func IdentityProviderRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.IdentityProviderRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -95,7 +93,7 @@ func NewIdentityProviderCascadeRemovedEvent(
}
}
-func IdentityProviderCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.IdentityProviderCascadeRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_mail_template.go b/internal/repository/org/policy_mail_template.go
index 7c42702054..288d94d45e 100644
--- a/internal/repository/org/policy_mail_template.go
+++ b/internal/repository/org/policy_mail_template.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -31,7 +29,7 @@ func NewMailTemplateAddedEvent(
}
}
-func MailTemplateAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTemplateAddedEventMapper(event)
if err != nil {
return nil, err
@@ -59,7 +57,7 @@ func NewMailTemplateChangedEvent(
return &MailTemplateChangedEvent{MailTemplateChangedEvent: *changedEvent}, nil
}
-func MailTemplateChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTemplateChangedEventMapper(event)
if err != nil {
return nil, err
@@ -83,7 +81,7 @@ func NewMailTemplateRemovedEvent(
}
}
-func MailTemplateRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTemplateRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_mail_text.go b/internal/repository/org/policy_mail_text.go
index 826dae46cd..4d541c8094 100644
--- a/internal/repository/org/policy_mail_text.go
+++ b/internal/repository/org/policy_mail_text.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -45,7 +43,7 @@ func NewMailTextAddedEvent(
}
}
-func MailTextAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTextAddedEventMapper(event)
if err != nil {
return nil, err
@@ -77,7 +75,7 @@ func NewMailTextChangedEvent(
return &MailTextChangedEvent{MailTextChangedEvent: *changedEvent}, nil
}
-func MailTextChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTextChangedEventMapper(event)
if err != nil {
return nil, err
@@ -105,7 +103,7 @@ func NewMailTextRemovedEvent(
}
}
-func MailTextRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.MailTextRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_notification.go b/internal/repository/org/policy_notification.go
index 0c436e9028..5beb9046e2 100644
--- a/internal/repository/org/policy_notification.go
+++ b/internal/repository/org/policy_notification.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -34,7 +33,7 @@ func NewNotificationPolicyAddedEvent(
}
}
-func NotificationPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.NotificationPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -65,7 +64,7 @@ func NewNotificationPolicyChangedEvent(
return &NotificationPolicyChangedEvent{NotificationPolicyChangedEvent: *changedEvent}, nil
}
-func NotificationPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.NotificationPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -92,7 +91,7 @@ func NewNotificationPolicyRemovedEvent(
}
}
-func NotificationPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.NotificationPolicyRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_password_age.go b/internal/repository/org/policy_password_age.go
index 8268fe50b5..99fc812c1b 100644
--- a/internal/repository/org/policy_password_age.go
+++ b/internal/repository/org/policy_password_age.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -36,7 +34,7 @@ func NewPasswordAgePolicyAddedEvent(
}
}
-func PasswordAgePolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordAgePolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -67,7 +65,7 @@ func NewPasswordAgePolicyChangedEvent(
return &PasswordAgePolicyChangedEvent{PasswordAgePolicyChangedEvent: *changedEvent}, nil
}
-func PasswordAgePolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordAgePolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -94,7 +92,7 @@ func NewPasswordAgePolicyRemovedEvent(
}
}
-func PasswordAgePolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordAgePolicyRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_password_complexity.go b/internal/repository/org/policy_password_complexity.go
index 6240625665..be9054537f 100644
--- a/internal/repository/org/policy_password_complexity.go
+++ b/internal/repository/org/policy_password_complexity.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -42,7 +40,7 @@ func NewPasswordComplexityPolicyAddedEvent(
}
}
-func PasswordComplexityPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordComplexityPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -73,7 +71,7 @@ func NewPasswordComplexityPolicyChangedEvent(
return &PasswordComplexityPolicyChangedEvent{PasswordComplexityPolicyChangedEvent: *changedEvent}, nil
}
-func PasswordComplexityPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordComplexityPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -100,7 +98,7 @@ func NewPasswordComplexityPolicyRemovedEvent(
}
}
-func PasswordComplexityPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PasswordComplexityPolicyRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_password_lockout.go b/internal/repository/org/policy_password_lockout.go
index 8536a924cd..e95d86eb79 100644
--- a/internal/repository/org/policy_password_lockout.go
+++ b/internal/repository/org/policy_password_lockout.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -36,7 +34,7 @@ func NewLockoutPolicyAddedEvent(
}
}
-func LockoutPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LockoutPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -67,7 +65,7 @@ func NewLockoutPolicyChangedEvent(
return &LockoutPolicyChangedEvent{LockoutPolicyChangedEvent: *changedEvent}, nil
}
-func LockoutPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LockoutPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -94,7 +92,7 @@ func NewLockoutPolicyRemovedEvent(
}
}
-func LockoutPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.LockoutPolicyRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/org/policy_privacy.go b/internal/repository/org/policy_privacy.go
index 380711a3fd..98916b1124 100644
--- a/internal/repository/org/policy_privacy.go
+++ b/internal/repository/org/policy_privacy.go
@@ -5,7 +5,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/policy"
)
@@ -40,7 +39,7 @@ func NewPrivacyPolicyAddedEvent(
}
}
-func PrivacyPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PrivacyPolicyAddedEventMapper(event)
if err != nil {
return nil, err
@@ -71,7 +70,7 @@ func NewPrivacyPolicyChangedEvent(
return &PrivacyPolicyChangedEvent{PrivacyPolicyChangedEvent: *changedEvent}, nil
}
-func PrivacyPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PrivacyPolicyChangedEventMapper(event)
if err != nil {
return nil, err
@@ -98,7 +97,7 @@ func NewPrivacyPolicyRemovedEvent(
}
}
-func PrivacyPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := policy.PrivacyPolicyRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/policy/custom_text.go b/internal/repository/policy/custom_text.go
index f227bcb904..4f3272bbee 100644
--- a/internal/repository/policy/custom_text.go
+++ b/internal/repository/policy/custom_text.go
@@ -1,13 +1,10 @@
package policy
import (
- "encoding/json"
-
"golang.org/x/text/language"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -26,11 +23,11 @@ type CustomTextSetEvent struct {
Text string `json:"text,omitempty"`
}
-func (e *CustomTextSetEvent) Data() interface{} {
+func (e *CustomTextSetEvent) Payload() interface{} {
return e
}
-func (e *CustomTextSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *CustomTextSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -50,12 +47,12 @@ func NewCustomTextSetEvent(
}
}
-func CustomTextSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &CustomTextSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "TEXT-28dwe", "unable to unmarshal custom text")
}
@@ -71,11 +68,11 @@ type CustomTextRemovedEvent struct {
Language language.Tag `json:"language,omitempty"`
}
-func (e *CustomTextRemovedEvent) Data() interface{} {
+func (e *CustomTextRemovedEvent) Payload() interface{} {
return e
}
-func (e *CustomTextRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *CustomTextRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -88,12 +85,12 @@ func NewCustomTextRemovedEvent(base *eventstore.BaseEvent, template, key string,
}
}
-func CustomTextRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &CustomTextRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "TEXT-28sMf", "unable to unmarshal custom text removed")
}
@@ -108,11 +105,11 @@ type CustomTextTemplateRemovedEvent struct {
Language language.Tag `json:"language,omitempty"`
}
-func (e *CustomTextTemplateRemovedEvent) Data() interface{} {
+func (e *CustomTextTemplateRemovedEvent) Payload() interface{} {
return e
}
-func (e *CustomTextTemplateRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *CustomTextTemplateRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -124,12 +121,12 @@ func NewCustomTextTemplateRemovedEvent(base *eventstore.BaseEvent, template stri
}
}
-func CustomTextTemplateRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func CustomTextTemplateRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &CustomTextTemplateRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "TEXT-mKKRs", "unable to unmarshal custom text message removed")
}
diff --git a/internal/repository/policy/label.go b/internal/repository/policy/label.go
index 754a65e0b1..39d6379180 100644
--- a/internal/repository/policy/label.go
+++ b/internal/repository/policy/label.go
@@ -1,11 +1,8 @@
package policy
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/asset"
)
@@ -48,11 +45,11 @@ type LabelPolicyAddedEvent struct {
DisableWatermark bool `json:"disableMsgPopup,omitempty"`
}
-func (e *LabelPolicyAddedEvent) Data() interface{} {
+func (e *LabelPolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -87,12 +84,12 @@ func NewLabelPolicyAddedEvent(
}
}
-func LabelPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LabelPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-puqv4", "unable to unmarshal label policy")
}
@@ -116,11 +113,11 @@ type LabelPolicyChangedEvent struct {
DisableWatermark *bool `json:"disableWatermark,omitempty"`
}
-func (e *LabelPolicyChangedEvent) Data() interface{} {
+func (e *LabelPolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -208,12 +205,12 @@ func ChangeDisableWatermark(disableWatermark bool) func(*LabelPolicyChangedEvent
}
}
-func LabelPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LabelPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-qhfFb", "unable to unmarshal label policy")
}
@@ -225,11 +222,11 @@ type LabelPolicyActivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *LabelPolicyActivatedEvent) Data() interface{} {
+func (e *LabelPolicyActivatedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyActivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyActivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -239,7 +236,7 @@ func NewLabelPolicyActivatedEvent(base *eventstore.BaseEvent) *LabelPolicyActiva
}
}
-func LabelPolicyActivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyActivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &LabelPolicyActivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -249,11 +246,11 @@ type LabelPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *LabelPolicyRemovedEvent) Data() interface{} {
+func (e *LabelPolicyRemovedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -263,7 +260,7 @@ func NewLabelPolicyRemovedEvent(base *eventstore.BaseEvent) *LabelPolicyRemovedE
}
}
-func LabelPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &LabelPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -273,11 +270,11 @@ type LabelPolicyLogoAddedEvent struct {
asset.AddedEvent
}
-func (e *LabelPolicyLogoAddedEvent) Data() interface{} {
+func (e *LabelPolicyLogoAddedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyLogoAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyLogoAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -287,7 +284,7 @@ func NewLabelPolicyLogoAddedEvent(base *eventstore.BaseEvent, storageKey string)
}
}
-func LabelPolicyLogoAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.AddedEventMapper(event)
if err != nil {
return nil, err
@@ -300,11 +297,11 @@ type LabelPolicyLogoRemovedEvent struct {
asset.RemovedEvent
}
-func (e *LabelPolicyLogoRemovedEvent) Data() interface{} {
+func (e *LabelPolicyLogoRemovedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyLogoRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyLogoRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -314,7 +311,7 @@ func NewLabelPolicyLogoRemovedEvent(base *eventstore.BaseEvent, storageKey strin
}
}
-func LabelPolicyLogoRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -327,11 +324,11 @@ type LabelPolicyIconAddedEvent struct {
asset.AddedEvent
}
-func (e *LabelPolicyIconAddedEvent) Data() interface{} {
+func (e *LabelPolicyIconAddedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyIconAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyIconAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -341,7 +338,7 @@ func NewLabelPolicyIconAddedEvent(base *eventstore.BaseEvent, storageKey string)
}
}
-func LabelPolicyIconAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.AddedEventMapper(event)
if err != nil {
return nil, err
@@ -354,11 +351,11 @@ type LabelPolicyIconRemovedEvent struct {
asset.RemovedEvent
}
-func (e *LabelPolicyIconRemovedEvent) Data() interface{} {
+func (e *LabelPolicyIconRemovedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyIconRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyIconRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -368,7 +365,7 @@ func NewLabelPolicyIconRemovedEvent(base *eventstore.BaseEvent, storageKey strin
}
}
-func LabelPolicyIconRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -381,11 +378,11 @@ type LabelPolicyLogoDarkAddedEvent struct {
asset.AddedEvent
}
-func (e *LabelPolicyLogoDarkAddedEvent) Data() interface{} {
+func (e *LabelPolicyLogoDarkAddedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyLogoDarkAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyLogoDarkAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -395,7 +392,7 @@ func NewLabelPolicyLogoDarkAddedEvent(base *eventstore.BaseEvent, storageKey str
}
}
-func LabelPolicyLogoDarkAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoDarkAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.AddedEventMapper(event)
if err != nil {
return nil, err
@@ -408,11 +405,11 @@ type LabelPolicyLogoDarkRemovedEvent struct {
asset.RemovedEvent
}
-func (e *LabelPolicyLogoDarkRemovedEvent) Data() interface{} {
+func (e *LabelPolicyLogoDarkRemovedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyLogoDarkRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyLogoDarkRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -422,7 +419,7 @@ func NewLabelPolicyLogoDarkRemovedEvent(base *eventstore.BaseEvent, storageKey s
}
}
-func LabelPolicyLogoDarkRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyLogoDarkRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -435,11 +432,11 @@ type LabelPolicyIconDarkAddedEvent struct {
asset.AddedEvent
}
-func (e *LabelPolicyIconDarkAddedEvent) Data() interface{} {
+func (e *LabelPolicyIconDarkAddedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyIconDarkAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyIconDarkAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -449,7 +446,7 @@ func NewLabelPolicyIconDarkAddedEvent(base *eventstore.BaseEvent, storageKey str
}
}
-func LabelPolicyIconDarkAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconDarkAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.AddedEventMapper(event)
if err != nil {
return nil, err
@@ -462,11 +459,11 @@ type LabelPolicyIconDarkRemovedEvent struct {
asset.RemovedEvent
}
-func (e *LabelPolicyIconDarkRemovedEvent) Data() interface{} {
+func (e *LabelPolicyIconDarkRemovedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyIconDarkRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyIconDarkRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -476,7 +473,7 @@ func NewLabelPolicyIconDarkRemovedEvent(base *eventstore.BaseEvent, storageKey s
}
}
-func LabelPolicyIconDarkRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyIconDarkRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -489,11 +486,11 @@ type LabelPolicyFontAddedEvent struct {
asset.AddedEvent
}
-func (e *LabelPolicyFontAddedEvent) Data() interface{} {
+func (e *LabelPolicyFontAddedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyFontAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyFontAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -503,7 +500,7 @@ func NewLabelPolicyFontAddedEvent(base *eventstore.BaseEvent, storageKey string)
}
}
-func LabelPolicyFontAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyFontAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.AddedEventMapper(event)
if err != nil {
return nil, err
@@ -516,11 +513,11 @@ type LabelPolicyFontRemovedEvent struct {
asset.RemovedEvent
}
-func (e *LabelPolicyFontRemovedEvent) Data() interface{} {
+func (e *LabelPolicyFontRemovedEvent) Payload() interface{} {
return e
}
-func (e *LabelPolicyFontRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyFontRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -530,7 +527,7 @@ func NewLabelPolicyFontRemovedEvent(base *eventstore.BaseEvent, storageKey strin
}
}
-func LabelPolicyFontRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyFontRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -543,11 +540,11 @@ type LabelPolicyAssetsRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *LabelPolicyAssetsRemovedEvent) Data() interface{} {
+func (e *LabelPolicyAssetsRemovedEvent) Payload() interface{} {
return nil
}
-func (e *LabelPolicyAssetsRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LabelPolicyAssetsRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -557,7 +554,7 @@ func NewLabelPolicyAssetsRemovedEvent(base *eventstore.BaseEvent) *LabelPolicyAs
}
}
-func LabelPolicyAssetsRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LabelPolicyAssetsRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &LabelPolicyAssetsRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/login.go b/internal/repository/policy/login.go
index 790b1a5716..f5e3618552 100644
--- a/internal/repository/policy/login.go
+++ b/internal/repository/policy/login.go
@@ -1,13 +1,11 @@
package policy
import (
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -39,11 +37,11 @@ type LoginPolicyAddedEvent struct {
MultiFactorCheckLifetime time.Duration `json:"multiFactorCheckLifetime,omitempty"`
}
-func (e *LoginPolicyAddedEvent) Data() interface{} {
+func (e *LoginPolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *LoginPolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LoginPolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -89,12 +87,12 @@ func NewLoginPolicyAddedEvent(
}
}
-func LoginPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LoginPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-nWndT", "unable to unmarshal policy")
}
@@ -124,11 +122,11 @@ type LoginPolicyChangedEvent struct {
MultiFactorCheckLifetime *time.Duration `json:"multiFactorCheckLifetime,omitempty"`
}
-func (e *LoginPolicyChangedEvent) Data() interface{} {
+func (e *LoginPolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *LoginPolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LoginPolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -252,12 +250,12 @@ func ChangeDisableLoginWithPhone(DisableLoginWithPhone bool) func(*LoginPolicyCh
}
}
-func LoginPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LoginPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-ehssl", "unable to unmarshal policy")
}
@@ -269,11 +267,11 @@ type LoginPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *LoginPolicyRemovedEvent) Data() interface{} {
+func (e *LoginPolicyRemovedEvent) Payload() interface{} {
return nil
}
-func (e *LoginPolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LoginPolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -283,7 +281,7 @@ func NewLoginPolicyRemovedEvent(base *eventstore.BaseEvent) *LoginPolicyRemovedE
}
}
-func LoginPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LoginPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &LoginPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/mail_template.go b/internal/repository/policy/mail_template.go
index 777157bad6..3b02c0f4fc 100644
--- a/internal/repository/policy/mail_template.go
+++ b/internal/repository/policy/mail_template.go
@@ -1,11 +1,8 @@
package policy
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -22,11 +19,11 @@ type MailTemplateAddedEvent struct {
Template []byte `json:"template,omitempty"`
}
-func (e *MailTemplateAddedEvent) Data() interface{} {
+func (e *MailTemplateAddedEvent) Payload() interface{} {
return e
}
-func (e *MailTemplateAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MailTemplateAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -40,12 +37,12 @@ func NewMailTemplateAddedEvent(
}
}
-func MailTemplateAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MailTemplateAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-5m9if", "unable to unmarshal mail template")
}
@@ -59,11 +56,11 @@ type MailTemplateChangedEvent struct {
Template *[]byte `json:"template,omitempty"`
}
-func (e *MailTemplateChangedEvent) Data() interface{} {
+func (e *MailTemplateChangedEvent) Payload() interface{} {
return e
}
-func (e *MailTemplateChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MailTemplateChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -91,12 +88,12 @@ func ChangeTemplate(template []byte) func(*MailTemplateChangedEvent) {
}
}
-func MailTemplateChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MailTemplateChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-3uu8K", "unable to unmarshal mail template policy")
}
@@ -108,11 +105,11 @@ type MailTemplateRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *MailTemplateRemovedEvent) Data() interface{} {
+func (e *MailTemplateRemovedEvent) Payload() interface{} {
return nil
}
-func (e *MailTemplateRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MailTemplateRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -122,7 +119,7 @@ func NewMailTemplateRemovedEvent(base *eventstore.BaseEvent) *MailTemplateRemove
}
}
-func MailTemplateRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTemplateRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &MailTemplateRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/mail_text.go b/internal/repository/policy/mail_text.go
index ab6c6d2698..04e3363ab9 100644
--- a/internal/repository/policy/mail_text.go
+++ b/internal/repository/policy/mail_text.go
@@ -1,12 +1,10 @@
package policy
import (
- "encoding/json"
"fmt"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -17,15 +15,15 @@ const (
MailTextPolicyRemovedEventType = mailTextPolicyPrefix + "removed"
)
-func NewAddMailTextUniqueConstraint(aggregateID, mailTextType, langugage string) *eventstore.EventUniqueConstraint {
+func NewAddMailTextUniqueConstraint(aggregateID, mailTextType, langugage string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueMailText,
fmt.Sprintf("%v:%v:%v", aggregateID, mailTextType, langugage),
"Errors.Org.AlreadyExists")
}
-func NewRemoveMailTextUniqueConstraint(aggregateID, mailTextType, langugage string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveMailTextUniqueConstraint(aggregateID, mailTextType, langugage string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueMailText,
fmt.Sprintf("%v:%v:%v", aggregateID, mailTextType, langugage))
}
@@ -43,12 +41,12 @@ type MailTextAddedEvent struct {
ButtonText string `json:"buttonText,omitempty"`
}
-func (e *MailTextAddedEvent) Data() interface{} {
+func (e *MailTextAddedEvent) Payload() interface{} {
return e
}
-func (e *MailTextAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddMailTextUniqueConstraint(e.Aggregate().ResourceOwner, e.MailTextType, e.Language)}
+func (e *MailTextAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddMailTextUniqueConstraint(e.Aggregate().ResourceOwner, e.MailTextType, e.Language)}
}
func NewMailTextAddedEvent(
@@ -75,12 +73,12 @@ func NewMailTextAddedEvent(
}
}
-func MailTextAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MailTextAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-5m9if", "unable to unmarshal mail text policy")
}
@@ -101,11 +99,11 @@ type MailTextChangedEvent struct {
ButtonText *string `json:"buttonText,omitempty"`
}
-func (e *MailTextChangedEvent) Data() interface{} {
+func (e *MailTextChangedEvent) Payload() interface{} {
return e
}
-func (e *MailTextChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MailTextChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -167,12 +165,12 @@ func ChangeButtonText(buttonText string) func(*MailTextChangedEvent) {
}
}
-func MailTextChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MailTextChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-bn88u", "unable to unmarshal mail text policy")
}
@@ -187,12 +185,12 @@ type MailTextRemovedEvent struct {
Language string `json:"language,omitempty"`
}
-func (e *MailTextRemovedEvent) Data() interface{} {
+func (e *MailTextRemovedEvent) Payload() interface{} {
return nil
}
-func (e *MailTextRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveMailTextUniqueConstraint(e.Aggregate().ResourceOwner, e.MailTextType, e.Language)}
+func (e *MailTextRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveMailTextUniqueConstraint(e.Aggregate().ResourceOwner, e.MailTextType, e.Language)}
}
func NewMailTextRemovedEvent(base *eventstore.BaseEvent, mailTextType, language string) *MailTextRemovedEvent {
@@ -203,7 +201,7 @@ func NewMailTextRemovedEvent(base *eventstore.BaseEvent, mailTextType, language
}
}
-func MailTextRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MailTextRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &MailTextRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/policy_domain.go b/internal/repository/policy/policy_domain.go
index b6475535e9..607fa5e4a5 100644
--- a/internal/repository/policy/policy_domain.go
+++ b/internal/repository/policy/policy_domain.go
@@ -1,12 +1,8 @@
package policy
import (
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -23,11 +19,11 @@ type DomainPolicyAddedEvent struct {
SMTPSenderAddressMatchesInstanceDomain bool `json:"smtpSenderAddressMatchesInstanceDomain,omitempty"`
}
-func (e *DomainPolicyAddedEvent) Data() interface{} {
+func (e *DomainPolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *DomainPolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainPolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -46,12 +42,12 @@ func NewDomainPolicyAddedEvent(
}
}
-func DomainPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &DomainPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-TvSmA", "unable to unmarshal policy")
}
@@ -67,11 +63,11 @@ type DomainPolicyChangedEvent struct {
SMTPSenderAddressMatchesInstanceDomain *bool `json:"smtpSenderAddressMatchesInstanceDomain,omitempty"`
}
-func (e *DomainPolicyChangedEvent) Data() interface{} {
+func (e *DomainPolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *DomainPolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainPolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -111,12 +107,12 @@ func ChangeSMTPSenderAddressMatchesInstanceDomain(smtpSenderAddressMatchesInstan
}
}
-func DomainPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &DomainPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-0Pl9d", "unable to unmarshal policy")
}
@@ -128,11 +124,11 @@ type DomainPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *DomainPolicyRemovedEvent) Data() interface{} {
+func (e *DomainPolicyRemovedEvent) Payload() interface{} {
return nil
}
-func (e *DomainPolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainPolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -142,7 +138,7 @@ func NewDomainPolicyRemovedEvent(base *eventstore.BaseEvent) *DomainPolicyRemove
}
}
-func DomainPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &DomainPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/policy_login_factors.go b/internal/repository/policy/policy_login_factors.go
index 5f45725cb1..a2749eb5fd 100644
--- a/internal/repository/policy/policy_login_factors.go
+++ b/internal/repository/policy/policy_login_factors.go
@@ -1,12 +1,9 @@
package policy
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -35,12 +32,12 @@ func NewSecondFactorAddedEvent(
}
}
-func SecondFactorAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecondFactorAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SecondFactorAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-Lp0dE", "unable to unmarshal policy")
}
@@ -48,11 +45,11 @@ func SecondFactorAddedEventMapper(event *repository.Event) (eventstore.Event, er
return e, nil
}
-func (e *SecondFactorAddedEvent) Data() interface{} {
+func (e *SecondFactorAddedEvent) Payload() interface{} {
return e
}
-func (e *SecondFactorAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SecondFactorAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -71,12 +68,12 @@ func NewSecondFactorRemovedEvent(
}
}
-func SecondFactorRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SecondFactorRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SecondFactorRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-5M9gd", "unable to unmarshal policy")
}
@@ -84,11 +81,11 @@ func SecondFactorRemovedEventMapper(event *repository.Event) (eventstore.Event,
return e, nil
}
-func (e *SecondFactorRemovedEvent) Data() interface{} {
+func (e *SecondFactorRemovedEvent) Payload() interface{} {
return e
}
-func (e *SecondFactorRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SecondFactorRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -108,12 +105,12 @@ func NewMultiFactorAddedEvent(
}
}
-func MultiFactorAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MultiFactorAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MultiFactorAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-5Ms90", "unable to unmarshal policy")
}
@@ -121,11 +118,11 @@ func MultiFactorAddedEventMapper(event *repository.Event) (eventstore.Event, err
return e, nil
}
-func (e *MultiFactorAddedEvent) Data() interface{} {
+func (e *MultiFactorAddedEvent) Payload() interface{} {
return e
}
-func (e *MultiFactorAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MultiFactorAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -144,12 +141,12 @@ func NewMultiFactorRemovedEvent(
}
}
-func MultiFactorRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MultiFactorRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &MultiFactorRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-1N8sd", "unable to unmarshal policy")
}
@@ -157,10 +154,10 @@ func MultiFactorRemovedEventMapper(event *repository.Event) (eventstore.Event, e
return e, nil
}
-func (e *MultiFactorRemovedEvent) Data() interface{} {
+func (e *MultiFactorRemovedEvent) Payload() interface{} {
return e
}
-func (e *MultiFactorRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MultiFactorRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/repository/policy/policy_login_identity_provider.go b/internal/repository/policy/policy_login_identity_provider.go
index f3ff719c2c..59772190f7 100644
--- a/internal/repository/policy/policy_login_identity_provider.go
+++ b/internal/repository/policy/policy_login_identity_provider.go
@@ -1,12 +1,9 @@
package policy
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -23,11 +20,11 @@ type IdentityProviderAddedEvent struct {
IDPProviderType domain.IdentityProviderType `json:"idpProviderType,omitempty"`
}
-func (e *IdentityProviderAddedEvent) Data() interface{} {
+func (e *IdentityProviderAddedEvent) Payload() interface{} {
return e
}
-func (e *IdentityProviderAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *IdentityProviderAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -44,12 +41,12 @@ func NewIdentityProviderAddedEvent(
}
}
-func IdentityProviderAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IdentityProviderAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROVI-bfNnp", "Errors.Internal")
}
@@ -63,11 +60,11 @@ type IdentityProviderRemovedEvent struct {
IDPConfigID string `json:"idpConfigId"`
}
-func (e *IdentityProviderRemovedEvent) Data() interface{} {
+func (e *IdentityProviderRemovedEvent) Payload() interface{} {
return e
}
-func (e *IdentityProviderRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *IdentityProviderRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -81,12 +78,12 @@ func NewIdentityProviderRemovedEvent(
}
}
-func IdentityProviderRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IdentityProviderRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROVI-6H0KQ", "Errors.Internal")
}
@@ -100,11 +97,11 @@ type IdentityProviderCascadeRemovedEvent struct {
IDPConfigID string `json:"idpConfigId"`
}
-func (e *IdentityProviderCascadeRemovedEvent) Data() interface{} {
+func (e *IdentityProviderCascadeRemovedEvent) Payload() interface{} {
return e
}
-func (e *IdentityProviderCascadeRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *IdentityProviderCascadeRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -118,12 +115,12 @@ func NewIdentityProviderCascadeRemovedEvent(
}
}
-func IdentityProviderCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IdentityProviderCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &IdentityProviderCascadeRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROVI-7M9fs", "Errors.Internal")
}
diff --git a/internal/repository/policy/policy_notification.go b/internal/repository/policy/policy_notification.go
index 0efb12a12c..3ce617e789 100644
--- a/internal/repository/policy/policy_notification.go
+++ b/internal/repository/policy/policy_notification.go
@@ -1,11 +1,8 @@
package policy
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -20,11 +17,11 @@ type NotificationPolicyAddedEvent struct {
PasswordChange bool `json:"passwordChange,omitempty"`
}
-func (e *NotificationPolicyAddedEvent) Data() interface{} {
+func (e *NotificationPolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *NotificationPolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *NotificationPolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -38,12 +35,12 @@ func NewNotificationPolicyAddedEvent(
}
}
-func NotificationPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &NotificationPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-0sp2nios", "unable to unmarshal policy")
}
@@ -57,11 +54,11 @@ type NotificationPolicyChangedEvent struct {
PasswordChange *bool `json:"passwordChange,omitempty"`
}
-func (e *NotificationPolicyChangedEvent) Data() interface{} {
+func (e *NotificationPolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *NotificationPolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *NotificationPolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -89,12 +86,12 @@ func ChangePasswordChange(passwordChange bool) func(*NotificationPolicyChangedEv
}
}
-func NotificationPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &NotificationPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-09s2oss", "unable to unmarshal policy")
}
@@ -106,11 +103,11 @@ type NotificationPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *NotificationPolicyRemovedEvent) Data() interface{} {
+func (e *NotificationPolicyRemovedEvent) Payload() interface{} {
return nil
}
-func (e *NotificationPolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *NotificationPolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -120,7 +117,7 @@ func NewNotificationPolicyRemovedEvent(base *eventstore.BaseEvent) *Notification
}
}
-func NotificationPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &NotificationPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/policy_password_age.go b/internal/repository/policy/policy_password_age.go
index f994e08abb..ee2ea88a3d 100644
--- a/internal/repository/policy/policy_password_age.go
+++ b/internal/repository/policy/policy_password_age.go
@@ -1,11 +1,8 @@
package policy
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -21,11 +18,11 @@ type PasswordAgePolicyAddedEvent struct {
MaxAgeDays uint64 `json:"maxAgeDays,omitempty"`
}
-func (e *PasswordAgePolicyAddedEvent) Data() interface{} {
+func (e *PasswordAgePolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *PasswordAgePolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PasswordAgePolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -42,12 +39,12 @@ func NewPasswordAgePolicyAddedEvent(
}
}
-func PasswordAgePolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &PasswordAgePolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-T3mGp", "unable to unmarshal policy")
}
@@ -62,11 +59,11 @@ type PasswordAgePolicyChangedEvent struct {
MaxAgeDays *uint64 `json:"maxAgeDays,omitempty"`
}
-func (e *PasswordAgePolicyChangedEvent) Data() interface{} {
+func (e *PasswordAgePolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *PasswordAgePolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PasswordAgePolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -100,12 +97,12 @@ func ChangeMaxAgeDays(maxAgeDays uint64) func(*PasswordAgePolicyChangedEvent) {
}
}
-func PasswordAgePolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &PasswordAgePolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-PqaVq", "unable to unmarshal policy")
}
@@ -117,11 +114,11 @@ type PasswordAgePolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *PasswordAgePolicyRemovedEvent) Data() interface{} {
+func (e *PasswordAgePolicyRemovedEvent) Payload() interface{} {
return nil
}
-func (e *PasswordAgePolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PasswordAgePolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -131,7 +128,7 @@ func NewPasswordAgePolicyRemovedEvent(base *eventstore.BaseEvent) *PasswordAgePo
}
}
-func PasswordAgePolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordAgePolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &PasswordAgePolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/policy_password_complexity.go b/internal/repository/policy/policy_password_complexity.go
index a7bf665c05..00a35da803 100644
--- a/internal/repository/policy/policy_password_complexity.go
+++ b/internal/repository/policy/policy_password_complexity.go
@@ -1,12 +1,8 @@
package policy
import (
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -25,11 +21,11 @@ type PasswordComplexityPolicyAddedEvent struct {
HasSymbol bool `json:"hasSymbol,omitempty"`
}
-func (e *PasswordComplexityPolicyAddedEvent) Data() interface{} {
+func (e *PasswordComplexityPolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *PasswordComplexityPolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PasswordComplexityPolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -51,12 +47,12 @@ func NewPasswordComplexityPolicyAddedEvent(
}
}
-func PasswordComplexityPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &PasswordComplexityPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-wYxlM", "unable to unmarshal policy")
}
@@ -74,11 +70,11 @@ type PasswordComplexityPolicyChangedEvent struct {
HasSymbol *bool `json:"hasSymbol,omitempty"`
}
-func (e *PasswordComplexityPolicyChangedEvent) Data() interface{} {
+func (e *PasswordComplexityPolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *PasswordComplexityPolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PasswordComplexityPolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -130,12 +126,12 @@ func ChangeHasSymbol(hasSymbol bool) func(*PasswordComplexityPolicyChangedEvent)
}
}
-func PasswordComplexityPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &PasswordComplexityPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-zBGB0", "unable to unmarshal policy")
}
@@ -147,11 +143,11 @@ type PasswordComplexityPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *PasswordComplexityPolicyRemovedEvent) Data() interface{} {
+func (e *PasswordComplexityPolicyRemovedEvent) Payload() interface{} {
return nil
}
-func (e *PasswordComplexityPolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PasswordComplexityPolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -161,7 +157,7 @@ func NewPasswordComplexityPolicyRemovedEvent(base *eventstore.BaseEvent) *Passwo
}
}
-func PasswordComplexityPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordComplexityPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &PasswordComplexityPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/policy_password_lockout.go b/internal/repository/policy/policy_password_lockout.go
index cc257dc80e..5e1c1b3984 100644
--- a/internal/repository/policy/policy_password_lockout.go
+++ b/internal/repository/policy/policy_password_lockout.go
@@ -1,12 +1,8 @@
package policy
import (
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -22,11 +18,11 @@ type LockoutPolicyAddedEvent struct {
ShowLockOutFailures bool `json:"showLockOutFailures,omitempty"`
}
-func (e *LockoutPolicyAddedEvent) Data() interface{} {
+func (e *LockoutPolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *LockoutPolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LockoutPolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -43,12 +39,12 @@ func NewLockoutPolicyAddedEvent(
}
}
-func LockoutPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LockoutPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-8XiVd", "unable to unmarshal policy")
}
@@ -63,11 +59,11 @@ type LockoutPolicyChangedEvent struct {
ShowLockOutFailures *bool `json:"showLockOutFailures,omitempty"`
}
-func (e *LockoutPolicyChangedEvent) Data() interface{} {
+func (e *LockoutPolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *LockoutPolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LockoutPolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -101,12 +97,12 @@ func ChangeShowLockOutFailures(showLockOutFailures bool) func(*LockoutPolicyChan
}
}
-func LockoutPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &LockoutPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-lWGRc", "unable to unmarshal policy")
}
@@ -118,11 +114,11 @@ type LockoutPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *LockoutPolicyRemovedEvent) Data() interface{} {
+func (e *LockoutPolicyRemovedEvent) Payload() interface{} {
return nil
}
-func (e *LockoutPolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *LockoutPolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -132,7 +128,7 @@ func NewLockoutPolicyRemovedEvent(base *eventstore.BaseEvent) *LockoutPolicyRemo
}
}
-func LockoutPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func LockoutPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &LockoutPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/policy/policy_privacy.go b/internal/repository/policy/policy_privacy.go
index a168a91cf3..75782c3cd1 100644
--- a/internal/repository/policy/policy_privacy.go
+++ b/internal/repository/policy/policy_privacy.go
@@ -1,12 +1,9 @@
package policy
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -24,11 +21,11 @@ type PrivacyPolicyAddedEvent struct {
SupportEmail domain.EmailAddress `json:"supportEmail,omitempty"`
}
-func (e *PrivacyPolicyAddedEvent) Data() interface{} {
+func (e *PrivacyPolicyAddedEvent) Payload() interface{} {
return e
}
-func (e *PrivacyPolicyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PrivacyPolicyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -48,11 +45,11 @@ func NewPrivacyPolicyAddedEvent(
}
}
-func PrivacyPolicyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &PrivacyPolicyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-2k0fs", "unable to unmarshal policy")
}
@@ -69,11 +66,11 @@ type PrivacyPolicyChangedEvent struct {
SupportEmail *domain.EmailAddress `json:"supportEmail,omitempty"`
}
-func (e *PrivacyPolicyChangedEvent) Data() interface{} {
+func (e *PrivacyPolicyChangedEvent) Payload() interface{} {
return e
}
-func (e *PrivacyPolicyChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PrivacyPolicyChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -119,12 +116,12 @@ func ChangeSupportEmail(supportEmail domain.EmailAddress) func(*PrivacyPolicyCha
}
}
-func PrivacyPolicyChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &PrivacyPolicyChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-22nf9", "unable to unmarshal policy")
}
@@ -136,11 +133,11 @@ type PrivacyPolicyRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *PrivacyPolicyRemovedEvent) Data() interface{} {
+func (e *PrivacyPolicyRemovedEvent) Payload() interface{} {
return nil
}
-func (e *PrivacyPolicyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PrivacyPolicyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -150,7 +147,7 @@ func NewPrivacyPolicyRemovedEvent(base *eventstore.BaseEvent) *PrivacyPolicyRemo
}
}
-func PrivacyPolicyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PrivacyPolicyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &PrivacyPolicyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/project/api_config.go b/internal/repository/project/api_config.go
index 1eeff48961..4f24589ac4 100644
--- a/internal/repository/project/api_config.go
+++ b/internal/repository/project/api_config.go
@@ -2,14 +2,11 @@ package project
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -29,11 +26,11 @@ type APIConfigAddedEvent struct {
AuthMethodType domain.APIAuthMethodType `json:"authMethodType,omitempty"`
}
-func (e *APIConfigAddedEvent) Data() interface{} {
+func (e *APIConfigAddedEvent) Payload() interface{} {
return e
}
-func (e *APIConfigAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *APIConfigAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -77,12 +74,12 @@ func (e *APIConfigAddedEvent) Validate(cmd eventstore.Command) bool {
return true
}
-func APIConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func APIConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &APIConfigAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "API-BFd15", "unable to unmarshal api config")
}
@@ -98,11 +95,11 @@ type APIConfigChangedEvent struct {
AuthMethodType *domain.APIAuthMethodType `json:"authMethodType,omitempty"`
}
-func (e *APIConfigChangedEvent) Data() interface{} {
+func (e *APIConfigChangedEvent) Payload() interface{} {
return e
}
-func (e *APIConfigChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *APIConfigChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -138,12 +135,12 @@ func ChangeAPIAuthMethodType(authMethodType domain.APIAuthMethodType) func(event
}
}
-func APIConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func APIConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &APIConfigChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "API-BFd15", "unable to unmarshal api config")
}
@@ -158,11 +155,11 @@ type APIConfigSecretChangedEvent struct {
ClientSecret *crypto.CryptoValue `json:"clientSecret,omitempty"`
}
-func (e *APIConfigSecretChangedEvent) Data() interface{} {
+func (e *APIConfigSecretChangedEvent) Payload() interface{} {
return e
}
-func (e *APIConfigSecretChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *APIConfigSecretChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -183,12 +180,12 @@ func NewAPIConfigSecretChangedEvent(
}
}
-func APIConfigSecretChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func APIConfigSecretChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &APIConfigSecretChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "API-M893d", "unable to unmarshal api config")
}
@@ -202,11 +199,11 @@ type APIConfigSecretCheckSucceededEvent struct {
AppID string `json:"appId"`
}
-func (e *APIConfigSecretCheckSucceededEvent) Data() interface{} {
+func (e *APIConfigSecretCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *APIConfigSecretCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *APIConfigSecretCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -225,12 +222,12 @@ func NewAPIConfigSecretCheckSucceededEvent(
}
}
-func APIConfigSecretCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func APIConfigSecretCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &APIConfigSecretCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "API-837gV", "unable to unmarshal api config")
}
@@ -244,11 +241,11 @@ type APIConfigSecretCheckFailedEvent struct {
AppID string `json:"appId"`
}
-func (e *APIConfigSecretCheckFailedEvent) Data() interface{} {
+func (e *APIConfigSecretCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *APIConfigSecretCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *APIConfigSecretCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -267,12 +264,12 @@ func NewAPIConfigSecretCheckFailedEvent(
}
}
-func APIConfigSecretCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func APIConfigSecretCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &APIConfigSecretCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "API-987g%", "unable to unmarshal api config")
}
diff --git a/internal/repository/project/application.go b/internal/repository/project/application.go
index b2afbb9e02..be2a944ef6 100644
--- a/internal/repository/project/application.go
+++ b/internal/repository/project/application.go
@@ -2,13 +2,10 @@ package project
import (
"context"
- "encoding/json"
"fmt"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -21,15 +18,15 @@ const (
ApplicationRemovedType = applicationEventTypePrefix + "removed"
)
-func NewAddApplicationUniqueConstraint(name, projectID string) *eventstore.EventUniqueConstraint {
+func NewAddApplicationUniqueConstraint(name, projectID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueAppNameType,
fmt.Sprintf("%s:%s", name, projectID),
"Errors.Project.App.AlreadyExists")
}
-func NewRemoveApplicationUniqueConstraint(name, projectID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveApplicationUniqueConstraint(name, projectID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueAppNameType,
fmt.Sprintf("%s:%s", name, projectID))
}
@@ -41,12 +38,12 @@ type ApplicationAddedEvent struct {
Name string `json:"name,omitempty"`
}
-func (e *ApplicationAddedEvent) Data() interface{} {
+func (e *ApplicationAddedEvent) Payload() interface{} {
return e
}
-func (e *ApplicationAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddApplicationUniqueConstraint(e.Name, e.Aggregate().ID)}
+func (e *ApplicationAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddApplicationUniqueConstraint(e.Name, e.Aggregate().ID)}
}
func NewApplicationAddedEvent(
@@ -66,12 +63,12 @@ func NewApplicationAddedEvent(
}
}
-func ApplicationAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ApplicationAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ApplicationAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "APPLICATION-Nffg2", "unable to unmarshal application")
}
@@ -87,12 +84,12 @@ type ApplicationChangedEvent struct {
oldName string
}
-func (e *ApplicationChangedEvent) Data() interface{} {
+func (e *ApplicationChangedEvent) Payload() interface{} {
return e
}
-func (e *ApplicationChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{
+func (e *ApplicationChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{
NewRemoveApplicationUniqueConstraint(e.oldName, e.Aggregate().ID),
NewAddApplicationUniqueConstraint(e.Name, e.Aggregate().ID),
}
@@ -117,12 +114,12 @@ func NewApplicationChangedEvent(
}
}
-func ApplicationChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ApplicationChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ApplicationChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "APPLICATION-9l0cs", "unable to unmarshal application")
}
@@ -136,11 +133,11 @@ type ApplicationDeactivatedEvent struct {
AppID string `json:"appId,omitempty"`
}
-func (e *ApplicationDeactivatedEvent) Data() interface{} {
+func (e *ApplicationDeactivatedEvent) Payload() interface{} {
return e
}
-func (e *ApplicationDeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ApplicationDeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -159,12 +156,12 @@ func NewApplicationDeactivatedEvent(
}
}
-func ApplicationDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ApplicationDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ApplicationDeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "APPLICATION-0p9fB", "unable to unmarshal application")
}
@@ -178,11 +175,11 @@ type ApplicationReactivatedEvent struct {
AppID string `json:"appId,omitempty"`
}
-func (e *ApplicationReactivatedEvent) Data() interface{} {
+func (e *ApplicationReactivatedEvent) Payload() interface{} {
return e
}
-func (e *ApplicationReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ApplicationReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -201,12 +198,12 @@ func NewApplicationReactivatedEvent(
}
}
-func ApplicationReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ApplicationReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ApplicationReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "APPLICATION-1m9e3", "unable to unmarshal application")
}
@@ -222,12 +219,12 @@ type ApplicationRemovedEvent struct {
entityID string
}
-func (e *ApplicationRemovedEvent) Data() interface{} {
+func (e *ApplicationRemovedEvent) Payload() interface{} {
return e
}
-func (e *ApplicationRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- remove := []*eventstore.EventUniqueConstraint{NewRemoveApplicationUniqueConstraint(e.name, e.Aggregate().ID)}
+func (e *ApplicationRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ remove := []*eventstore.UniqueConstraint{NewRemoveApplicationUniqueConstraint(e.name, e.Aggregate().ID)}
if e.entityID != "" {
remove = append(remove, NewRemoveSAMLConfigEntityIDUniqueConstraint(e.entityID))
}
@@ -253,12 +250,12 @@ func NewApplicationRemovedEvent(
}
}
-func ApplicationRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ApplicationRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ApplicationRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "APPLICATION-1m9e3", "unable to unmarshal application")
}
diff --git a/internal/repository/project/grant.go b/internal/repository/project/grant.go
index b1248ea120..e9c60b4dab 100644
--- a/internal/repository/project/grant.go
+++ b/internal/repository/project/grant.go
@@ -2,13 +2,10 @@ package project
import (
"context"
- "encoding/json"
"fmt"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -22,15 +19,15 @@ var (
GrantRemovedType = grantEventTypePrefix + "removed"
)
-func NewAddProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.EventUniqueConstraint {
+func NewAddProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueGrantType,
fmt.Sprintf("%s:%s", grantedOrgID, projectID),
"Errors.Project.Grant.AlreadyExists")
}
-func NewRemoveProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveProjectGrantUniqueConstraint(grantedOrgID, projectID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueGrantType,
fmt.Sprintf("%s:%s", grantedOrgID, projectID))
}
@@ -43,12 +40,12 @@ type GrantAddedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
-func (e *GrantAddedEvent) Data() interface{} {
+func (e *GrantAddedEvent) Payload() interface{} {
return e
}
-func (e *GrantAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddProjectGrantUniqueConstraint(e.GrantedOrgID, e.Aggregate().ID)}
+func (e *GrantAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddProjectGrantUniqueConstraint(e.GrantedOrgID, e.Aggregate().ID)}
}
func NewGrantAddedEvent(
@@ -70,12 +67,12 @@ func NewGrantAddedEvent(
}
}
-func GrantAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-mL0vs", "unable to unmarshal project grant")
}
@@ -90,11 +87,11 @@ type GrantChangedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
-func (e *GrantChangedEvent) Data() interface{} {
+func (e *GrantChangedEvent) Payload() interface{} {
return e
}
-func (e *GrantChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GrantChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -115,12 +112,12 @@ func NewGrantChangedEvent(
}
}
-func GrantChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-mL0vs", "unable to unmarshal project grant")
}
@@ -135,11 +132,11 @@ type GrantCascadeChangedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
-func (e *GrantCascadeChangedEvent) Data() interface{} {
+func (e *GrantCascadeChangedEvent) Payload() interface{} {
return e
}
-func (e *GrantCascadeChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GrantCascadeChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -160,12 +157,12 @@ func NewGrantCascadeChangedEvent(
}
}
-func GrantCascadeChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantCascadeChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantCascadeChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-9o0se", "unable to unmarshal project grant")
}
@@ -179,11 +176,11 @@ type GrantDeactivateEvent struct {
GrantID string `json:"grantId,omitempty"`
}
-func (e *GrantDeactivateEvent) Data() interface{} {
+func (e *GrantDeactivateEvent) Payload() interface{} {
return e
}
-func (e *GrantDeactivateEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GrantDeactivateEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -202,12 +199,12 @@ func NewGrantDeactivateEvent(
}
}
-func GrantDeactivateEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantDeactivateEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantDeactivateEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-9o0se", "unable to unmarshal project grant")
}
@@ -221,11 +218,11 @@ type GrantReactivatedEvent struct {
GrantID string `json:"grantId,omitempty"`
}
-func (e *GrantReactivatedEvent) Data() interface{} {
+func (e *GrantReactivatedEvent) Payload() interface{} {
return e
}
-func (e *GrantReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GrantReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -244,12 +241,12 @@ func NewGrantReactivatedEvent(
}
}
-func GrantReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-78f7D", "unable to unmarshal project grant")
}
@@ -264,12 +261,12 @@ type GrantRemovedEvent struct {
grantedOrgID string
}
-func (e *GrantRemovedEvent) Data() interface{} {
+func (e *GrantRemovedEvent) Payload() interface{} {
return e
}
-func (e *GrantRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveProjectGrantUniqueConstraint(e.grantedOrgID, e.Aggregate().ID)}
+func (e *GrantRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveProjectGrantUniqueConstraint(e.grantedOrgID, e.Aggregate().ID)}
}
func NewGrantRemovedEvent(
@@ -289,12 +286,12 @@ func NewGrantRemovedEvent(
}
}
-func GrantRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-28jM8", "unable to unmarshal project grant")
}
diff --git a/internal/repository/project/grant_member.go b/internal/repository/project/grant_member.go
index 2c0f41041b..5e5e700d94 100644
--- a/internal/repository/project/grant_member.go
+++ b/internal/repository/project/grant_member.go
@@ -2,13 +2,10 @@ package project
import (
"context"
- "encoding/json"
"fmt"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/member"
)
@@ -20,15 +17,15 @@ var (
GrantMemberCascadeRemovedType = grantEventTypePrefix + member.CascadeRemovedEventType
)
-func NewAddProjectGrantMemberUniqueConstraint(projectID, userID, grantID string) *eventstore.EventUniqueConstraint {
+func NewAddProjectGrantMemberUniqueConstraint(projectID, userID, grantID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueProjectGrantMemberType,
fmt.Sprintf("%s:%s:%s", projectID, userID, grantID),
"Errors.Project.Member.AlreadyExists")
}
-func NewRemoveProjectGrantMemberUniqueConstraint(projectID, userID, grantID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveProjectGrantMemberUniqueConstraint(projectID, userID, grantID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueProjectGrantMemberType,
fmt.Sprintf("%s:%s:%s", projectID, userID, grantID),
)
@@ -42,12 +39,12 @@ type GrantMemberAddedEvent struct {
GrantID string `json:"grantId"`
}
-func (e *GrantMemberAddedEvent) Data() interface{} {
+func (e *GrantMemberAddedEvent) Payload() interface{} {
return e
}
-func (e *GrantMemberAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddProjectGrantMemberUniqueConstraint(e.Aggregate().ID, e.UserID, e.GrantID)}
+func (e *GrantMemberAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddProjectGrantMemberUniqueConstraint(e.Aggregate().ID, e.UserID, e.GrantID)}
}
func NewProjectGrantMemberAddedEvent(
@@ -69,12 +66,12 @@ func NewProjectGrantMemberAddedEvent(
}
}
-func GrantMemberAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantMemberAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantMemberAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-9f0sf", "unable to unmarshal label policy")
}
@@ -90,11 +87,11 @@ type GrantMemberChangedEvent struct {
UserID string `json:"userId"`
}
-func (e *GrantMemberChangedEvent) Data() interface{} {
+func (e *GrantMemberChangedEvent) Payload() interface{} {
return e
}
-func (e *GrantMemberChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *GrantMemberChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -117,12 +114,12 @@ func NewProjectGrantMemberChangedEvent(
}
}
-func GrantMemberChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantMemberChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantMemberChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-39fi8", "unable to unmarshal label policy")
}
@@ -137,12 +134,12 @@ type GrantMemberRemovedEvent struct {
GrantID string `json:"grantId"`
}
-func (e *GrantMemberRemovedEvent) Data() interface{} {
+func (e *GrantMemberRemovedEvent) Payload() interface{} {
return e
}
-func (e *GrantMemberRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveProjectGrantMemberUniqueConstraint(e.Aggregate().ID, e.UserID, e.GrantID)}
+func (e *GrantMemberRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveProjectGrantMemberUniqueConstraint(e.Aggregate().ID, e.UserID, e.GrantID)}
}
func NewProjectGrantMemberRemovedEvent(
@@ -162,12 +159,12 @@ func NewProjectGrantMemberRemovedEvent(
}
}
-func GrantMemberRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantMemberRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantMemberRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-173fM", "unable to unmarshal label policy")
}
@@ -182,12 +179,12 @@ type GrantMemberCascadeRemovedEvent struct {
GrantID string `json:"grantId"`
}
-func (e *GrantMemberCascadeRemovedEvent) Data() interface{} {
+func (e *GrantMemberCascadeRemovedEvent) Payload() interface{} {
return e
}
-func (e *GrantMemberCascadeRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveProjectGrantMemberUniqueConstraint(e.Aggregate().ID, e.UserID, e.GrantID)}
+func (e *GrantMemberCascadeRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveProjectGrantMemberUniqueConstraint(e.Aggregate().ID, e.UserID, e.GrantID)}
}
func NewProjectGrantMemberCascadeRemovedEvent(
@@ -207,12 +204,12 @@ func NewProjectGrantMemberCascadeRemovedEvent(
}
}
-func GrantMemberCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func GrantMemberCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &GrantMemberCascadeRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-3kfs3", "unable to unmarshal label policy")
}
diff --git a/internal/repository/project/key.go b/internal/repository/project/key.go
index 0f2eb11a58..4eb03c8ddc 100644
--- a/internal/repository/project/key.go
+++ b/internal/repository/project/key.go
@@ -2,14 +2,11 @@ package project
import (
"context"
- "encoding/json"
"time"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -29,11 +26,11 @@ type ApplicationKeyAddedEvent struct {
PublicKey []byte `json:"publicKey,omitempty"`
}
-func (e *ApplicationKeyAddedEvent) Data() interface{} {
+func (e *ApplicationKeyAddedEvent) Payload() interface{} {
return e
}
-func (e *ApplicationKeyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ApplicationKeyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -62,12 +59,12 @@ func NewApplicationKeyAddedEvent(
}
}
-func ApplicationKeyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ApplicationKeyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ApplicationKeyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "API-BFd15", "unable to unmarshal api config")
}
@@ -81,11 +78,11 @@ type ApplicationKeyRemovedEvent struct {
KeyID string `json:"keyId,omitempty"`
}
-func (e *ApplicationKeyRemovedEvent) Data() interface{} {
+func (e *ApplicationKeyRemovedEvent) Payload() interface{} {
return e
}
-func (e *ApplicationKeyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ApplicationKeyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -104,13 +101,13 @@ func NewApplicationKeyRemovedEvent(
}
}
-func ApplicationKeyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ApplicationKeyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
applicationKeyRemoved := &ApplicationKeyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, applicationKeyRemoved)
+ err := event.Unmarshal(applicationKeyRemoved)
if err != nil {
- return nil, errors.ThrowInternal(err, "USER-5Gm9s", "unable to unmarshal application key removed")
+ return nil, errors.ThrowInternal(err, "USER-cjLeA", "unable to unmarshal application key removed")
}
return applicationKeyRemoved, nil
diff --git a/internal/repository/project/member.go b/internal/repository/project/member.go
index f32062d274..d2928bfdc2 100644
--- a/internal/repository/project/member.go
+++ b/internal/repository/project/member.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/member"
)
@@ -39,7 +37,7 @@ func NewProjectMemberAddedEvent(
}
}
-func MemberAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.MemberAddedEventMapper(event)
if err != nil {
return nil, err
@@ -72,7 +70,7 @@ func NewProjectMemberChangedEvent(
}
}
-func MemberChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.ChangedEventMapper(event)
if err != nil {
return nil, err
@@ -103,7 +101,7 @@ func NewProjectMemberRemovedEvent(
}
}
-func MemberRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -134,7 +132,7 @@ func NewProjectMemberCascadeRemovedEvent(
}
}
-func MemberCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MemberCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := member.CascadeRemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/project/oidc_config.go b/internal/repository/project/oidc_config.go
index d39e92c2aa..977af91ea6 100644
--- a/internal/repository/project/oidc_config.go
+++ b/internal/repository/project/oidc_config.go
@@ -2,14 +2,12 @@ package project
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -43,11 +41,11 @@ type OIDCConfigAddedEvent struct {
SkipNativeAppSuccessPage bool `json:"skipNativeAppSuccessPage,omitempty"`
}
-func (e *OIDCConfigAddedEvent) Data() interface{} {
+func (e *OIDCConfigAddedEvent) Payload() interface{} {
return e
}
-func (e *OIDCConfigAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCConfigAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -185,12 +183,12 @@ func (e *OIDCConfigAddedEvent) Validate(cmd eventstore.Command) bool {
return e.SkipNativeAppSuccessPage == c.SkipNativeAppSuccessPage
}
-func OIDCConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCConfigAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-BFd15", "unable to unmarshal oidc config")
}
@@ -219,11 +217,11 @@ type OIDCConfigChangedEvent struct {
SkipNativeAppSuccessPage *bool `json:"skipNativeAppSuccessPage,omitempty"`
}
-func (e *OIDCConfigChangedEvent) Data() interface{} {
+func (e *OIDCConfigChangedEvent) Payload() interface{} {
return e
}
-func (e *OIDCConfigChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCConfigChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -343,12 +341,12 @@ func ChangeSkipNativeAppSuccessPage(skipNativeAppSuccessPage bool) func(event *O
}
}
-func OIDCConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCConfigChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-BFd15", "unable to unmarshal oidc config")
}
@@ -363,11 +361,11 @@ type OIDCConfigSecretChangedEvent struct {
ClientSecret *crypto.CryptoValue `json:"clientSecret,omitempty"`
}
-func (e *OIDCConfigSecretChangedEvent) Data() interface{} {
+func (e *OIDCConfigSecretChangedEvent) Payload() interface{} {
return e
}
-func (e *OIDCConfigSecretChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCConfigSecretChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -388,12 +386,12 @@ func NewOIDCConfigSecretChangedEvent(
}
}
-func OIDCConfigSecretChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCConfigSecretChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCConfigSecretChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-M893d", "unable to unmarshal oidc config")
}
@@ -407,11 +405,11 @@ type OIDCConfigSecretCheckSucceededEvent struct {
AppID string `json:"appId"`
}
-func (e *OIDCConfigSecretCheckSucceededEvent) Data() interface{} {
+func (e *OIDCConfigSecretCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *OIDCConfigSecretCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCConfigSecretCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -430,12 +428,12 @@ func NewOIDCConfigSecretCheckSucceededEvent(
}
}
-func OIDCConfigSecretCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCConfigSecretCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCConfigSecretCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-837gV", "unable to unmarshal oidc config")
}
@@ -449,11 +447,11 @@ type OIDCConfigSecretCheckFailedEvent struct {
AppID string `json:"appId"`
}
-func (e *OIDCConfigSecretCheckFailedEvent) Data() interface{} {
+func (e *OIDCConfigSecretCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *OIDCConfigSecretCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OIDCConfigSecretCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -472,12 +470,12 @@ func NewOIDCConfigSecretCheckFailedEvent(
}
}
-func OIDCConfigSecretCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func OIDCConfigSecretCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &OIDCConfigSecretCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "OIDC-987g%", "unable to unmarshal oidc config")
}
diff --git a/internal/repository/project/project.go b/internal/repository/project/project.go
index eb2abba073..f378142436 100644
--- a/internal/repository/project/project.go
+++ b/internal/repository/project/project.go
@@ -2,13 +2,10 @@ package project
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -21,15 +18,15 @@ const (
ProjectRemovedType = projectEventTypePrefix + "removed"
)
-func NewAddProjectNameUniqueConstraint(projectName, resourceOwner string) *eventstore.EventUniqueConstraint {
+func NewAddProjectNameUniqueConstraint(projectName, resourceOwner string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueProjectnameType,
projectName+resourceOwner,
"Errors.Project.AlreadyExists")
}
-func NewRemoveProjectNameUniqueConstraint(projectName, resourceOwner string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveProjectNameUniqueConstraint(projectName, resourceOwner string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueProjectnameType,
projectName+resourceOwner)
}
@@ -44,12 +41,12 @@ type ProjectAddedEvent struct {
PrivateLabelingSetting domain.PrivateLabelingSetting `json:"privateLabelingSetting,omitempty"`
}
-func (e *ProjectAddedEvent) Data() interface{} {
+func (e *ProjectAddedEvent) Payload() interface{} {
return e
}
-func (e *ProjectAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddProjectNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
+func (e *ProjectAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddProjectNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
}
func NewProjectAddedEvent(
@@ -75,12 +72,12 @@ func NewProjectAddedEvent(
}
}
-func ProjectAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ProjectAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ProjectAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-Bfg2f", "unable to unmarshal project")
}
@@ -99,13 +96,13 @@ type ProjectChangeEvent struct {
oldName string
}
-func (e *ProjectChangeEvent) Data() interface{} {
+func (e *ProjectChangeEvent) Payload() interface{} {
return e
}
-func (e *ProjectChangeEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- if e.oldName != "" {
- return []*eventstore.EventUniqueConstraint{
+func (e *ProjectChangeEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ if e.Name != nil {
+ return []*eventstore.UniqueConstraint{
NewRemoveProjectNameUniqueConstraint(e.oldName, e.Aggregate().ResourceOwner),
NewAddProjectNameUniqueConstraint(*e.Name, e.Aggregate().ResourceOwner),
}
@@ -168,12 +165,12 @@ func ChangePrivateLabelingSetting(ChangePrivateLabelingSetting domain.PrivateLab
}
}
-func ProjectChangeEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ProjectChangeEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &ProjectChangeEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-M9osd", "unable to unmarshal project")
}
@@ -185,11 +182,11 @@ type ProjectDeactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *ProjectDeactivatedEvent) Data() interface{} {
+func (e *ProjectDeactivatedEvent) Payload() interface{} {
return nil
}
-func (e *ProjectDeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ProjectDeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -203,7 +200,7 @@ func NewProjectDeactivatedEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func ProjectDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ProjectDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &ProjectDeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -213,11 +210,11 @@ type ProjectReactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *ProjectReactivatedEvent) Data() interface{} {
+func (e *ProjectReactivatedEvent) Payload() interface{} {
return nil
}
-func (e *ProjectReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *ProjectReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -231,7 +228,7 @@ func NewProjectReactivatedEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func ProjectReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ProjectReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &ProjectReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -241,15 +238,15 @@ type ProjectRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
Name string
- entityIDUniqueContraints []*eventstore.EventUniqueConstraint
+ entityIDUniqueContraints []*eventstore.UniqueConstraint
}
-func (e *ProjectRemovedEvent) Data() interface{} {
+func (e *ProjectRemovedEvent) Payload() interface{} {
return nil
}
-func (e *ProjectRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- constraints := []*eventstore.EventUniqueConstraint{NewRemoveProjectNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
+func (e *ProjectRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ constraints := []*eventstore.UniqueConstraint{NewRemoveProjectNameUniqueConstraint(e.Name, e.Aggregate().ResourceOwner)}
if e.entityIDUniqueContraints != nil {
for _, constraint := range e.entityIDUniqueContraints {
constraints = append(constraints, constraint)
@@ -262,7 +259,7 @@ func NewProjectRemovedEvent(
ctx context.Context,
aggregate *eventstore.Aggregate,
name string,
- entityIDUniqueContraints []*eventstore.EventUniqueConstraint,
+ entityIDUniqueContraints []*eventstore.UniqueConstraint,
) *ProjectRemovedEvent {
return &ProjectRemovedEvent{
BaseEvent: *eventstore.NewBaseEventForPush(
@@ -275,7 +272,7 @@ func NewProjectRemovedEvent(
}
}
-func ProjectRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func ProjectRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &ProjectRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/project/role.go b/internal/repository/project/role.go
index bc04ee5499..e5bf74d0ef 100644
--- a/internal/repository/project/role.go
+++ b/internal/repository/project/role.go
@@ -2,13 +2,10 @@ package project
import (
"context"
- "encoding/json"
"fmt"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
var (
@@ -19,15 +16,15 @@ var (
RoleRemovedType = roleEventTypePrefix + "removed"
)
-func NewAddProjectRoleUniqueConstraint(roleKey, projectID string) *eventstore.EventUniqueConstraint {
+func NewAddProjectRoleUniqueConstraint(roleKey, projectID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueRoleType,
fmt.Sprintf("%s:%s", roleKey, projectID),
"Errors.Project.Role.AlreadyExists")
}
-func NewRemoveProjectRoleUniqueConstraint(roleKey, projectID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveProjectRoleUniqueConstraint(roleKey, projectID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueRoleType,
fmt.Sprintf("%s:%s", roleKey, projectID))
}
@@ -40,12 +37,12 @@ type RoleAddedEvent struct {
Group string `json:"group,omitempty"`
}
-func (e *RoleAddedEvent) Data() interface{} {
+func (e *RoleAddedEvent) Payload() interface{} {
return e
}
-func (e *RoleAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddProjectRoleUniqueConstraint(e.Key, e.Aggregate().ID)}
+func (e *RoleAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddProjectRoleUniqueConstraint(e.Key, e.Aggregate().ID)}
}
func NewRoleAddedEvent(
@@ -67,12 +64,12 @@ func NewRoleAddedEvent(
}
}
-func RoleAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RoleAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &RoleAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-2M0xy", "unable to unmarshal project role")
}
@@ -88,11 +85,11 @@ type RoleChangedEvent struct {
Group *string `json:"group,omitempty"`
}
-func (e *RoleChangedEvent) Data() interface{} {
+func (e *RoleChangedEvent) Payload() interface{} {
return e
}
-func (e *RoleChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *RoleChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -138,12 +135,12 @@ func ChangeGroup(group string) func(event *RoleChangedEvent) {
e.Group = &group
}
}
-func RoleChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RoleChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &RoleChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-3M0vx", "unable to unmarshal project role")
}
@@ -157,12 +154,12 @@ type RoleRemovedEvent struct {
Key string `json:"key,omitempty"`
}
-func (e *RoleRemovedEvent) Data() interface{} {
+func (e *RoleRemovedEvent) Payload() interface{} {
return e
}
-func (e *RoleRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveProjectRoleUniqueConstraint(e.Key, e.Aggregate().ID)}
+func (e *RoleRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveProjectRoleUniqueConstraint(e.Key, e.Aggregate().ID)}
}
func NewRoleRemovedEvent(
@@ -179,12 +176,12 @@ func NewRoleRemovedEvent(
}
}
-func RoleRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RoleRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &RoleRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "PROJECT-1M0xs", "unable to unmarshal project role")
}
diff --git a/internal/repository/project/saml_config.go b/internal/repository/project/saml_config.go
index 6fc38469e8..3406484433 100644
--- a/internal/repository/project/saml_config.go
+++ b/internal/repository/project/saml_config.go
@@ -2,11 +2,9 @@ package project
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -24,25 +22,25 @@ type SAMLConfigAddedEvent struct {
MetadataURL string `json:"metadata_url,omitempty"`
}
-func (e *SAMLConfigAddedEvent) Data() interface{} {
+func (e *SAMLConfigAddedEvent) Payload() interface{} {
return e
}
-func NewAddSAMLConfigEntityIDUniqueConstraint(entityID string) *eventstore.EventUniqueConstraint {
+func NewAddSAMLConfigEntityIDUniqueConstraint(entityID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueEntityIDType,
entityID,
"Errors.Project.App.SAMLEntityIDAlreadyExists")
}
-func NewRemoveSAMLConfigEntityIDUniqueConstraint(entityID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveSAMLConfigEntityIDUniqueConstraint(entityID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueEntityIDType,
entityID)
}
-func (e *SAMLConfigAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddSAMLConfigEntityIDUniqueConstraint(e.EntityID)}
+func (e *SAMLConfigAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddSAMLConfigEntityIDUniqueConstraint(e.EntityID)}
}
func NewSAMLConfigAddedEvent(
@@ -66,12 +64,12 @@ func NewSAMLConfigAddedEvent(
}
}
-func SAMLConfigAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLConfigAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SAMLConfigAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "SAML-BDd15", "unable to unmarshal saml config")
}
@@ -89,13 +87,13 @@ type SAMLConfigChangedEvent struct {
oldEntityID string
}
-func (e *SAMLConfigChangedEvent) Data() interface{} {
+func (e *SAMLConfigChangedEvent) Payload() interface{} {
return e
}
-func (e *SAMLConfigChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SAMLConfigChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
if e.EntityID != "" {
- return []*eventstore.EventUniqueConstraint{
+ return []*eventstore.UniqueConstraint{
NewRemoveSAMLConfigEntityIDUniqueConstraint(e.oldEntityID),
NewAddSAMLConfigEntityIDUniqueConstraint(e.EntityID),
}
@@ -149,12 +147,12 @@ func ChangeEntityID(entityID string) func(event *SAMLConfigChangedEvent) {
}
}
-func SAMLConfigChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SAMLConfigChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SAMLConfigChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "SAML-BFd15", "unable to unmarshal saml config")
}
diff --git a/internal/repository/quota/events.go b/internal/repository/quota/events.go
index 06f41cdd0c..b52226689a 100644
--- a/internal/repository/quota/events.go
+++ b/internal/repository/quota/events.go
@@ -2,13 +2,11 @@ package quota
import (
"context"
- "encoding/json"
"strconv"
"time"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type Unit uint
@@ -29,7 +27,7 @@ const (
ActionsAllRunsSeconds
)
-func NewAddQuotaUnitUniqueConstraint(unit Unit) *eventstore.EventUniqueConstraint {
+func NewAddQuotaUnitUniqueConstraint(unit Unit) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueQuotaNameType,
strconv.FormatUint(uint64(unit), 10),
@@ -37,8 +35,8 @@ func NewAddQuotaUnitUniqueConstraint(unit Unit) *eventstore.EventUniqueConstrain
)
}
-func NewRemoveQuotaNameUniqueConstraint(unit Unit) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveQuotaNameUniqueConstraint(unit Unit) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueQuotaNameType,
strconv.FormatUint(uint64(unit), 10),
)
@@ -62,11 +60,11 @@ type SetEventNotification struct {
CallURL string `json:"callUrl"`
}
-func (e *SetEvent) Data() interface{} {
+func (e *SetEvent) Payload() interface{} {
return e
}
-func (e *SetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *SetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -117,12 +115,11 @@ func ChangeNotifications(notifications []*SetEventNotification) QuotaChange {
}
}
-func SetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func SetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &SetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
-
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "QUOTA-kmIpI", "unable to unmarshal quota set")
}
@@ -140,11 +137,11 @@ type NotificationDueEvent struct {
Usage uint64 `json:"usage"`
}
-func (n *NotificationDueEvent) Data() interface{} {
+func (n *NotificationDueEvent) Payload() interface{} {
return n
}
-func (n *NotificationDueEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (n *NotificationDueEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -173,12 +170,12 @@ func NewNotificationDueEvent(
}
}
-func NotificationDueEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotificationDueEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &NotificationDueEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "QUOTA-k56rT", "unable to unmarshal notification due")
}
@@ -197,11 +194,11 @@ type NotifiedEvent struct {
DueEventID string `json:"dueEventID"`
}
-func (e *NotifiedEvent) Data() interface{} {
+func (e *NotifiedEvent) Payload() interface{} {
return e
}
-func (e *NotifiedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *NotifiedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -214,7 +211,7 @@ func NewNotifiedEvent(
return &NotifiedEvent{
BaseEvent: *eventstore.NewBaseEventForPush(
ctx,
- &aggregate,
+ aggregate,
NotifiedEventType,
),
ID: id,
@@ -232,12 +229,12 @@ func NewNotifiedEvent(
}
}
-func NotifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func NotifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &NotifiedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "QUOTA-4n8vs", "unable to unmarshal quota notified")
}
@@ -250,12 +247,12 @@ type RemovedEvent struct {
Unit Unit `json:"unit"`
}
-func (e *RemovedEvent) Data() interface{} {
+func (e *RemovedEvent) Payload() interface{} {
return e
}
-func (e *RemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveQuotaNameUniqueConstraint(e.Unit)}
+func (e *RemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveQuotaNameUniqueConstraint(e.Unit)}
}
func NewRemovedEvent(
@@ -273,12 +270,12 @@ func NewRemovedEvent(
}
}
-func RemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func RemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &RemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "QUOTA-4bReE", "unable to unmarshal quota removed")
}
diff --git a/internal/repository/session/session.go b/internal/repository/session/session.go
index 8f5785a52a..d7b8bd76b9 100644
--- a/internal/repository/session/session.go
+++ b/internal/repository/session/session.go
@@ -2,7 +2,6 @@ package session
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/http"
@@ -10,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -37,11 +35,11 @@ type AddedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *AddedEvent) Data() interface{} {
+func (e *AddedEvent) Payload() interface{} {
return e
}
-func (e *AddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *AddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -57,11 +55,12 @@ func NewAddedEvent(ctx context.Context,
}
}
-func AddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func AddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &AddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "SESSION-DG4gn", "unable to unmarshal session added")
}
@@ -76,11 +75,11 @@ type UserCheckedEvent struct {
CheckedAt time.Time `json:"checkedAt"`
}
-func (e *UserCheckedEvent) Data() interface{} {
+func (e *UserCheckedEvent) Payload() interface{} {
return e
}
-func (e *UserCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -101,11 +100,11 @@ func NewUserCheckedEvent(
}
}
-func UserCheckedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserCheckedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &UserCheckedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "SESSION-DSGn5", "unable to unmarshal user checked")
}
@@ -119,11 +118,11 @@ type PasswordCheckedEvent struct {
CheckedAt time.Time `json:"checkedAt"`
}
-func (e *PasswordCheckedEvent) Data() interface{} {
+func (e *PasswordCheckedEvent) Payload() interface{} {
return e
}
-func (e *PasswordCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PasswordCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -142,11 +141,11 @@ func NewPasswordCheckedEvent(
}
}
-func PasswordCheckedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PasswordCheckedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &PasswordCheckedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "SESSION-DGt21", "unable to unmarshal password checked")
}
@@ -160,11 +159,11 @@ type IntentCheckedEvent struct {
CheckedAt time.Time `json:"checkedAt"`
}
-func (e *IntentCheckedEvent) Data() interface{} {
+func (e *IntentCheckedEvent) Payload() interface{} {
return e
}
-func (e *IntentCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *IntentCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -183,11 +182,11 @@ func NewIntentCheckedEvent(
}
}
-func IntentCheckedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func IntentCheckedEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &IntentCheckedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "SESSION-DGt90", "unable to unmarshal intent checked")
}
@@ -204,11 +203,11 @@ type WebAuthNChallengedEvent struct {
RPID string `json:"rpid,omitempty"`
}
-func (e *WebAuthNChallengedEvent) Data() interface{} {
+func (e *WebAuthNChallengedEvent) Payload() interface{} {
return e
}
-func (e *WebAuthNChallengedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *WebAuthNChallengedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -244,11 +243,11 @@ type WebAuthNCheckedEvent struct {
UserVerified bool `json:"userVerified,omitempty"`
}
-func (e *WebAuthNCheckedEvent) Data() interface{} {
+func (e *WebAuthNCheckedEvent) Payload() interface{} {
return e
}
-func (e *WebAuthNCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *WebAuthNCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -279,11 +278,11 @@ type TOTPCheckedEvent struct {
CheckedAt time.Time `json:"checkedAt"`
}
-func (e *TOTPCheckedEvent) Data() interface{} {
+func (e *TOTPCheckedEvent) Payload() interface{} {
return e
}
-func (e *TOTPCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *TOTPCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -315,11 +314,11 @@ type OTPSMSChallengedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *OTPSMSChallengedEvent) Data() interface{} {
+func (e *OTPSMSChallengedEvent) Payload() interface{} {
return e
}
-func (e *OTPSMSChallengedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OTPSMSChallengedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -355,11 +354,11 @@ type OTPSMSSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *OTPSMSSentEvent) Data() interface{} {
+func (e *OTPSMSSentEvent) Payload() interface{} {
return e
}
-func (e *OTPSMSSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OTPSMSSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -386,11 +385,11 @@ type OTPSMSCheckedEvent struct {
CheckedAt time.Time `json:"checkedAt"`
}
-func (e *OTPSMSCheckedEvent) Data() interface{} {
+func (e *OTPSMSCheckedEvent) Payload() interface{} {
return e
}
-func (e *OTPSMSCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OTPSMSCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -423,11 +422,11 @@ type OTPEmailChallengedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *OTPEmailChallengedEvent) Data() interface{} {
+func (e *OTPEmailChallengedEvent) Payload() interface{} {
return e
}
-func (e *OTPEmailChallengedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OTPEmailChallengedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -465,11 +464,11 @@ type OTPEmailSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *OTPEmailSentEvent) Data() interface{} {
+func (e *OTPEmailSentEvent) Payload() interface{} {
return e
}
-func (e *OTPEmailSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OTPEmailSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -496,11 +495,11 @@ type OTPEmailCheckedEvent struct {
CheckedAt time.Time `json:"checkedAt"`
}
-func (e *OTPEmailCheckedEvent) Data() interface{} {
+func (e *OTPEmailCheckedEvent) Payload() interface{} {
return e
}
-func (e *OTPEmailCheckedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *OTPEmailCheckedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -529,11 +528,11 @@ type TokenSetEvent struct {
TokenID string `json:"tokenID"`
}
-func (e *TokenSetEvent) Data() interface{} {
+func (e *TokenSetEvent) Payload() interface{} {
return e
}
-func (e *TokenSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *TokenSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -552,11 +551,11 @@ func NewTokenSetEvent(
}
}
-func TokenSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func TokenSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &TokenSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "SESSION-Sf3va", "unable to unmarshal token set")
}
@@ -570,11 +569,11 @@ type MetadataSetEvent struct {
Metadata map[string][]byte `json:"metadata"`
}
-func (e *MetadataSetEvent) Data() interface{} {
+func (e *MetadataSetEvent) Payload() interface{} {
return e
}
-func (e *MetadataSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MetadataSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -593,11 +592,11 @@ func NewMetadataSetEvent(
}
}
-func MetadataSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MetadataSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
added := &MetadataSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, added)
+ err := event.Unmarshal(added)
if err != nil {
return nil, errors.ThrowInternal(err, "SESSION-BD21d", "unable to unmarshal metadata set")
}
@@ -609,11 +608,11 @@ type TerminateEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *TerminateEvent) Data() interface{} {
+func (e *TerminateEvent) Payload() interface{} {
return e
}
-func (e *TerminateEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *TerminateEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -630,7 +629,7 @@ func NewTerminateEvent(
}
}
-func TerminateEventMapper(event *repository.Event) (eventstore.Event, error) {
+func TerminateEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &TerminateEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/settings/debug_notification.go b/internal/repository/settings/debug_notification.go
index 30ceb49c37..c1ae68f87f 100644
--- a/internal/repository/settings/debug_notification.go
+++ b/internal/repository/settings/debug_notification.go
@@ -1,11 +1,8 @@
package settings
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -23,11 +20,11 @@ type DebugNotificationProviderAddedEvent struct {
Compact bool `json:"compact,omitempty"`
}
-func (e *DebugNotificationProviderAddedEvent) Data() interface{} {
+func (e *DebugNotificationProviderAddedEvent) Payload() interface{} {
return e
}
-func (e *DebugNotificationProviderAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DebugNotificationProviderAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -41,12 +38,12 @@ func NewDebugNotificationProviderAddedEvent(
}
}
-func DebugNotificationProviderAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &DebugNotificationProviderAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "SET-f93ns", "unable to unmarshal debug notification added")
}
@@ -60,11 +57,11 @@ type DebugNotificationProviderChangedEvent struct {
Compact *bool `json:"compact,omitempty"`
}
-func (e *DebugNotificationProviderChangedEvent) Data() interface{} {
+func (e *DebugNotificationProviderChangedEvent) Payload() interface{} {
return e
}
-func (e *DebugNotificationProviderChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DebugNotificationProviderChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -92,12 +89,12 @@ func ChangeCompact(compact bool) func(*DebugNotificationProviderChangedEvent) {
}
}
-func DebugNotificationProviderChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &DebugNotificationProviderChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "POLIC-ehssl", "unable to unmarshal policy")
}
@@ -109,11 +106,11 @@ type DebugNotificationProviderRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *DebugNotificationProviderRemovedEvent) Data() interface{} {
+func (e *DebugNotificationProviderRemovedEvent) Payload() interface{} {
return nil
}
-func (e *DebugNotificationProviderRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DebugNotificationProviderRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -123,7 +120,7 @@ func NewDebugNotificationProviderRemovedEvent(base *eventstore.BaseEvent) *Debug
}
}
-func DebugNotificationProviderRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DebugNotificationProviderRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &DebugNotificationProviderRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/user/human.go b/internal/repository/user/human.go
index f314cd8df8..7cbeaa9c71 100644
--- a/internal/repository/user/human.go
+++ b/internal/repository/user/human.go
@@ -2,7 +2,6 @@ package user
import (
"context"
- "encoding/json"
"time"
"golang.org/x/text/language"
@@ -12,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -56,12 +54,12 @@ type HumanAddedEvent struct {
ChangeRequired bool `json:"changeRequired,omitempty"`
}
-func (e *HumanAddedEvent) Data() interface{} {
+func (e *HumanAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain)}
+func (e *HumanAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain)}
}
func (e *HumanAddedEvent) AddAddressData(
@@ -124,13 +122,13 @@ func NewHumanAddedEvent(
}
}
-func HumanAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
humanAdded := &HumanAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, humanAdded)
+ err := event.Unmarshal(humanAdded)
if err != nil {
- return nil, errors.ThrowInternal(err, "USER-5Gm9s", "unable to unmarshal human added")
+ return nil, errors.ThrowInternal(err, "USER-vGlhy", "unable to unmarshal human added")
}
return humanAdded, nil
@@ -161,12 +159,12 @@ type HumanRegisteredEvent struct {
ChangeRequired bool `json:"changeRequired,omitempty"`
}
-func (e *HumanRegisteredEvent) Data() interface{} {
+func (e *HumanRegisteredEvent) Payload() interface{} {
return e
}
-func (e *HumanRegisteredEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain)}
+func (e *HumanRegisteredEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain)}
}
func (e *HumanRegisteredEvent) AddAddressData(
@@ -229,11 +227,11 @@ func NewHumanRegisteredEvent(
}
}
-func HumanRegisteredEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanRegisteredEventMapper(event eventstore.Event) (eventstore.Event, error) {
humanRegistered := &HumanRegisteredEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, humanRegistered)
+ err := event.Unmarshal(humanRegistered)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-3Vm9s", "unable to unmarshal human registered")
}
@@ -248,11 +246,11 @@ type HumanInitialCodeAddedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *HumanInitialCodeAddedEvent) Data() interface{} {
+func (e *HumanInitialCodeAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanInitialCodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanInitialCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -278,11 +276,11 @@ func NewHumanInitialCodeAddedEvent(
}
}
-func HumanInitialCodeAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanInitialCodeAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
humanRegistered := &HumanInitialCodeAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, humanRegistered)
+ err := event.Unmarshal(humanRegistered)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-bM9se", "unable to unmarshal human initial code added")
}
@@ -294,11 +292,11 @@ type HumanInitialCodeSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanInitialCodeSentEvent) Data() interface{} {
+func (e *HumanInitialCodeSentEvent) Payload() interface{} {
return nil
}
-func (e *HumanInitialCodeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanInitialCodeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -312,7 +310,7 @@ func NewHumanInitialCodeSentEvent(ctx context.Context, aggregate *eventstore.Agg
}
}
-func HumanInitialCodeSentEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanInitialCodeSentEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanInitialCodeSentEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -322,11 +320,11 @@ type HumanInitializedCheckSucceededEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanInitializedCheckSucceededEvent) Data() interface{} {
+func (e *HumanInitializedCheckSucceededEvent) Payload() interface{} {
return nil
}
-func (e *HumanInitializedCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanInitializedCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -340,7 +338,7 @@ func NewHumanInitializedCheckSucceededEvent(ctx context.Context, aggregate *even
}
}
-func HumanInitializedCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanInitializedCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanInitializedCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -350,11 +348,11 @@ type HumanInitializedCheckFailedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanInitializedCheckFailedEvent) Data() interface{} {
+func (e *HumanInitializedCheckFailedEvent) Payload() interface{} {
return nil
}
-func (e *HumanInitializedCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanInitializedCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -368,7 +366,7 @@ func NewHumanInitializedCheckFailedEvent(ctx context.Context, aggregate *eventst
}
}
-func HumanInitializedCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanInitializedCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanInitializedCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -380,11 +378,11 @@ type HumanSignedOutEvent struct {
UserAgentID string `json:"userAgentID"`
}
-func (e *HumanSignedOutEvent) Data() interface{} {
+func (e *HumanSignedOutEvent) Payload() interface{} {
return e
}
-func (e *HumanSignedOutEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanSignedOutEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -403,11 +401,11 @@ func NewHumanSignedOutEvent(
}
}
-func HumanSignedOutEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanSignedOutEventMapper(event eventstore.Event) (eventstore.Event, error) {
signedOut := &HumanSignedOutEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, signedOut)
+ err := event.Unmarshal(signedOut)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-WFS3g", "unable to unmarshal human signed out")
}
diff --git a/internal/repository/user/human_address.go b/internal/repository/user/human_address.go
index 70d8889178..7681866f2a 100644
--- a/internal/repository/user/human_address.go
+++ b/internal/repository/user/human_address.go
@@ -2,12 +2,9 @@ package user
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -25,11 +22,11 @@ type HumanAddressChangedEvent struct {
StreetAddress *string `json:"streetAddress,omitempty"`
}
-func (e *HumanAddressChangedEvent) Data() interface{} {
+func (e *HumanAddressChangedEvent) Payload() interface{} {
return e
}
-func (e *HumanAddressChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanAddressChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -86,11 +83,11 @@ func ChangeStreetAddress(street string) func(event *HumanAddressChangedEvent) {
}
}
-func HumanAddressChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanAddressChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
addressChanged := &HumanAddressChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, addressChanged)
+ err := event.Unmarshal(addressChanged)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-5M0pd", "unable to unmarshal human address changed")
}
diff --git a/internal/repository/user/human_avatar.go b/internal/repository/user/human_avatar.go
index 6b88b524a1..cfea6573f2 100644
--- a/internal/repository/user/human_avatar.go
+++ b/internal/repository/user/human_avatar.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/asset"
)
@@ -29,7 +28,7 @@ func NewHumanAvatarAddedEvent(ctx context.Context, aggregate *eventstore.Aggrega
}
}
-func HumanAvatarAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanAvatarAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.AddedEventMapper(event)
if err != nil {
return nil, err
@@ -53,7 +52,7 @@ func NewHumanAvatarRemovedEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func HumanAvatarRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanAvatarRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := asset.RemovedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/user/human_email.go b/internal/repository/user/human_email.go
index 51081dc6e5..9706706c4a 100644
--- a/internal/repository/user/human_email.go
+++ b/internal/repository/user/human_email.go
@@ -2,7 +2,6 @@ package user
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/http"
@@ -10,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -29,11 +27,11 @@ type HumanEmailChangedEvent struct {
EmailAddress domain.EmailAddress `json:"email,omitempty"`
}
-func (e *HumanEmailChangedEvent) Data() interface{} {
+func (e *HumanEmailChangedEvent) Payload() interface{} {
return e
}
-func (e *HumanEmailChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanEmailChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -48,11 +46,11 @@ func NewHumanEmailChangedEvent(ctx context.Context, aggregate *eventstore.Aggreg
}
}
-func HumanEmailChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanEmailChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
emailChangedEvent := &HumanEmailChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, emailChangedEvent)
+ err := event.Unmarshal(emailChangedEvent)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-4M0sd", "unable to unmarshal human password changed")
}
@@ -66,11 +64,11 @@ type HumanEmailVerifiedEvent struct {
IsEmailVerified bool `json:"-"`
}
-func (e *HumanEmailVerifiedEvent) Data() interface{} {
+func (e *HumanEmailVerifiedEvent) Payload() interface{} {
return nil
}
-func (e *HumanEmailVerifiedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanEmailVerifiedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -84,7 +82,7 @@ func NewHumanEmailVerifiedEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func HumanEmailVerifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanEmailVerifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
emailVerified := &HumanEmailVerifiedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
IsEmailVerified: true,
@@ -96,11 +94,11 @@ type HumanEmailVerificationFailedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanEmailVerificationFailedEvent) Data() interface{} {
+func (e *HumanEmailVerificationFailedEvent) Payload() interface{} {
return nil
}
-func (e *HumanEmailVerificationFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanEmailVerificationFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -114,7 +112,7 @@ func NewHumanEmailVerificationFailedEvent(ctx context.Context, aggregate *events
}
}
-func HumanEmailVerificationFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanEmailVerificationFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanEmailVerificationFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -130,11 +128,11 @@ type HumanEmailCodeAddedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *HumanEmailCodeAddedEvent) Data() interface{} {
+func (e *HumanEmailCodeAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanEmailCodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanEmailCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -173,11 +171,11 @@ func NewHumanEmailCodeAddedEventV2(
}
}
-func HumanEmailCodeAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanEmailCodeAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
codeAdded := &HumanEmailCodeAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, codeAdded)
+ err := event.Unmarshal(codeAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-3M0sd", "unable to unmarshal human email code added")
}
@@ -189,11 +187,11 @@ type HumanEmailCodeSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanEmailCodeSentEvent) Data() interface{} {
+func (e *HumanEmailCodeSentEvent) Payload() interface{} {
return nil
}
-func (e *HumanEmailCodeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanEmailCodeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -207,7 +205,7 @@ func NewHumanEmailCodeSentEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func HumanEmailCodeSentEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanEmailCodeSentEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanEmailCodeSentEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/user/human_external_idp.go b/internal/repository/user/human_external_idp.go
index e5a62e00b6..cf698f4471 100644
--- a/internal/repository/user/human_external_idp.go
+++ b/internal/repository/user/human_external_idp.go
@@ -2,12 +2,9 @@ package user
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -23,15 +20,15 @@ const (
UserIDPLoginCheckSucceededType = idpLoginEventPrefix + "check.succeeded"
)
-func NewAddUserIDPLinkUniqueConstraint(idpConfigID, externalUserID string) *eventstore.EventUniqueConstraint {
+func NewAddUserIDPLinkUniqueConstraint(idpConfigID, externalUserID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueUserIDPLinkType,
idpConfigID+externalUserID,
"Errors.User.ExternalIDP.AlreadyExists")
}
-func NewRemoveUserIDPLinkUniqueConstraint(idpConfigID, externalUserID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveUserIDPLinkUniqueConstraint(idpConfigID, externalUserID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueUserIDPLinkType,
idpConfigID+externalUserID)
}
@@ -44,12 +41,12 @@ type UserIDPLinkAddedEvent struct {
DisplayName string `json:"displayName,omitempty"`
}
-func (e *UserIDPLinkAddedEvent) Data() interface{} {
+func (e *UserIDPLinkAddedEvent) Payload() interface{} {
return e
}
-func (e *UserIDPLinkAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddUserIDPLinkUniqueConstraint(e.IDPConfigID, e.ExternalUserID)}
+func (e *UserIDPLinkAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddUserIDPLinkUniqueConstraint(e.IDPConfigID, e.ExternalUserID)}
}
func NewUserIDPLinkAddedEvent(
@@ -71,12 +68,12 @@ func NewUserIDPLinkAddedEvent(
}
}
-func UserIDPLinkAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserIDPLinkAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &UserIDPLinkAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-6M9sd", "unable to unmarshal user external idp added")
}
@@ -91,12 +88,12 @@ type UserIDPLinkRemovedEvent struct {
ExternalUserID string `json:"userId,omitempty"`
}
-func (e *UserIDPLinkRemovedEvent) Data() interface{} {
+func (e *UserIDPLinkRemovedEvent) Payload() interface{} {
return e
}
-func (e *UserIDPLinkRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveUserIDPLinkUniqueConstraint(e.IDPConfigID, e.ExternalUserID)}
+func (e *UserIDPLinkRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveUserIDPLinkUniqueConstraint(e.IDPConfigID, e.ExternalUserID)}
}
func NewUserIDPLinkRemovedEvent(
@@ -116,14 +113,14 @@ func NewUserIDPLinkRemovedEvent(
}
}
-func UserIDPLinkRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserIDPLinkRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &UserIDPLinkRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
- return nil, errors.ThrowInternal(err, "USER-5Gm9s", "unable to unmarshal user external idp removed")
+ return nil, errors.ThrowInternal(err, "USER-eAWoT", "unable to unmarshal user external idp removed")
}
return e, nil
@@ -136,12 +133,12 @@ type UserIDPLinkCascadeRemovedEvent struct {
ExternalUserID string `json:"userId,omitempty"`
}
-func (e *UserIDPLinkCascadeRemovedEvent) Data() interface{} {
+func (e *UserIDPLinkCascadeRemovedEvent) Payload() interface{} {
return e
}
-func (e *UserIDPLinkCascadeRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveUserIDPLinkUniqueConstraint(e.IDPConfigID, e.ExternalUserID)}
+func (e *UserIDPLinkCascadeRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveUserIDPLinkUniqueConstraint(e.IDPConfigID, e.ExternalUserID)}
}
func NewUserIDPLinkCascadeRemovedEvent(
@@ -161,12 +158,12 @@ func NewUserIDPLinkCascadeRemovedEvent(
}
}
-func UserIDPLinkCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserIDPLinkCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &UserIDPLinkCascadeRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-dKGqO", "unable to unmarshal user external idp cascade removed")
}
@@ -179,11 +176,11 @@ type UserIDPCheckSucceededEvent struct {
*AuthRequestInfo
}
-func (e *UserIDPCheckSucceededEvent) Data() interface{} {
+func (e *UserIDPCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *UserIDPCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserIDPCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -201,12 +198,12 @@ func NewUserIDPCheckSucceededEvent(
}
}
-func UserIDPCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserIDPCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &UserIDPCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-oikSS", "unable to unmarshal user external idp check succeeded")
}
@@ -221,11 +218,11 @@ type UserIDPExternalIDMigratedEvent struct {
NewID string `json:"newId"`
}
-func (e *UserIDPExternalIDMigratedEvent) Data() interface{} {
+func (e *UserIDPExternalIDMigratedEvent) Payload() interface{} {
return e
}
-func (e *UserIDPExternalIDMigratedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserIDPExternalIDMigratedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/repository/user/human_mfa_events.go b/internal/repository/user/human_mfa_events.go
index f0cc13877a..7a1050431c 100644
--- a/internal/repository/user/human_mfa_events.go
+++ b/internal/repository/user/human_mfa_events.go
@@ -4,8 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
-
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -17,11 +15,11 @@ type HumanMFAInitSkippedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanMFAInitSkippedEvent) Data() interface{} {
+func (e *HumanMFAInitSkippedEvent) Payload() interface{} {
return e
}
-func (e *HumanMFAInitSkippedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanMFAInitSkippedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -35,7 +33,7 @@ func NewHumanMFAInitSkippedEvent(ctx context.Context, aggregate *eventstore.Aggr
}
}
-func HumanMFAInitSkippedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanMFAInitSkippedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanMFAInitSkippedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/user/human_mfa_otp.go b/internal/repository/user/human_mfa_otp.go
index d3dd2824cd..95fd0c0bb0 100644
--- a/internal/repository/user/human_mfa_otp.go
+++ b/internal/repository/user/human_mfa_otp.go
@@ -2,15 +2,12 @@ package user
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/http"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -42,11 +39,11 @@ type HumanOTPAddedEvent struct {
Secret *crypto.CryptoValue `json:"otpSecret,omitempty"`
}
-func (e *HumanOTPAddedEvent) Data() interface{} {
+func (e *HumanOTPAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -65,11 +62,11 @@ func NewHumanOTPAddedEvent(
}
}
-func HumanOTPAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanOTPAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
otpAdded := &HumanOTPAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, otpAdded)
+ err := event.Unmarshal(otpAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Ns9df", "unable to unmarshal human otp added")
}
@@ -81,11 +78,11 @@ type HumanOTPVerifiedEvent struct {
UserAgentID string `json:"userAgentID,omitempty"`
}
-func (e *HumanOTPVerifiedEvent) Data() interface{} {
+func (e *HumanOTPVerifiedEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPVerifiedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPVerifiedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -104,7 +101,7 @@ func NewHumanOTPVerifiedEvent(
}
}
-func HumanOTPVerifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanOTPVerifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanOTPVerifiedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -114,11 +111,11 @@ type HumanOTPRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanOTPRemovedEvent) Data() interface{} {
+func (e *HumanOTPRemovedEvent) Payload() interface{} {
return nil
}
-func (e *HumanOTPRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -135,7 +132,7 @@ func NewHumanOTPRemovedEvent(
}
}
-func HumanOTPRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanOTPRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanOTPRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -146,11 +143,11 @@ type HumanOTPCheckSucceededEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPCheckSucceededEvent) Data() interface{} {
+func (e *HumanOTPCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -169,11 +166,11 @@ func NewHumanOTPCheckSucceededEvent(
}
}
-func HumanOTPCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanOTPCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
otpAdded := &HumanOTPCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, otpAdded)
+ err := event.Unmarshal(otpAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Ns9df", "unable to unmarshal human otp check succeeded")
}
@@ -185,11 +182,11 @@ type HumanOTPCheckFailedEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPCheckFailedEvent) Data() interface{} {
+func (e *HumanOTPCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -208,11 +205,11 @@ func NewHumanOTPCheckFailedEvent(
}
}
-func HumanOTPCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanOTPCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
otpAdded := &HumanOTPCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, otpAdded)
+ err := event.Unmarshal(otpAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Ns9df", "unable to unmarshal human otp check failed")
}
@@ -223,11 +220,11 @@ type HumanOTPSMSAddedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanOTPSMSAddedEvent) Data() interface{} {
+func (e *HumanOTPSMSAddedEvent) Payload() interface{} {
return nil
}
-func (e *HumanOTPSMSAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPSMSAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -252,11 +249,11 @@ type HumanOTPSMSRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanOTPSMSRemovedEvent) Data() interface{} {
+func (e *HumanOTPSMSRemovedEvent) Payload() interface{} {
return nil
}
-func (e *HumanOTPSMSRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPSMSRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -286,11 +283,11 @@ type HumanOTPSMSCodeAddedEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPSMSCodeAddedEvent) Data() interface{} {
+func (e *HumanOTPSMSCodeAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPSMSCodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPSMSCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -330,11 +327,11 @@ type HumanOTPSMSCodeSentEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPSMSCodeSentEvent) Data() interface{} {
+func (e *HumanOTPSMSCodeSentEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPSMSCodeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPSMSCodeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -360,11 +357,11 @@ type HumanOTPSMSCheckSucceededEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPSMSCheckSucceededEvent) Data() interface{} {
+func (e *HumanOTPSMSCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPSMSCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPSMSCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -392,11 +389,11 @@ type HumanOTPSMSCheckFailedEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPSMSCheckFailedEvent) Data() interface{} {
+func (e *HumanOTPSMSCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPSMSCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPSMSCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -423,11 +420,11 @@ type HumanOTPEmailAddedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanOTPEmailAddedEvent) Data() interface{} {
+func (e *HumanOTPEmailAddedEvent) Payload() interface{} {
return nil
}
-func (e *HumanOTPEmailAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPEmailAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -452,11 +449,11 @@ type HumanOTPEmailRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanOTPEmailRemovedEvent) Data() interface{} {
+func (e *HumanOTPEmailRemovedEvent) Payload() interface{} {
return nil
}
-func (e *HumanOTPEmailRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPEmailRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -486,11 +483,11 @@ type HumanOTPEmailCodeAddedEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPEmailCodeAddedEvent) Data() interface{} {
+func (e *HumanOTPEmailCodeAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPEmailCodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPEmailCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -530,11 +527,11 @@ type HumanOTPEmailCodeSentEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPEmailCodeSentEvent) Data() interface{} {
+func (e *HumanOTPEmailCodeSentEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPEmailCodeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPEmailCodeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -560,11 +557,11 @@ type HumanOTPEmailCheckSucceededEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPEmailCheckSucceededEvent) Data() interface{} {
+func (e *HumanOTPEmailCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPEmailCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPEmailCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -592,11 +589,11 @@ type HumanOTPEmailCheckFailedEvent struct {
*AuthRequestInfo
}
-func (e *HumanOTPEmailCheckFailedEvent) Data() interface{} {
+func (e *HumanOTPEmailCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *HumanOTPEmailCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanOTPEmailCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/repository/user/human_mfa_passwordless.go b/internal/repository/user/human_mfa_passwordless.go
index abdee0c3d4..ec6342d2e7 100644
--- a/internal/repository/user/human_mfa_passwordless.go
+++ b/internal/repository/user/human_mfa_passwordless.go
@@ -2,7 +2,6 @@ package user
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/http"
@@ -10,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -56,7 +54,7 @@ func NewHumanPasswordlessAddedEvent(
}
}
-func HumanPasswordlessAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNAddedEventMapper(event)
if err != nil {
return nil, err
@@ -100,7 +98,7 @@ func NewHumanPasswordlessVerifiedEvent(
}
}
-func HumanPasswordlessVerifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessVerifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNVerifiedEventMapper(event)
if err != nil {
return nil, err
@@ -132,7 +130,7 @@ func NewHumanPasswordlessSignCountChangedEvent(
}
}
-func HumanPasswordlessSignCountChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessSignCountChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNSignCountChangedEventMapper(event)
if err != nil {
return nil, err
@@ -168,7 +166,7 @@ func NewHumanPasswordlessRemovedEvent(
}
}
-func HumanPasswordlessRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -202,7 +200,7 @@ func NewHumanPasswordlessBeginLoginEvent(
}
}
-func HumanPasswordlessBeginLoginEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessBeginLoginEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNBeginLoginEventMapper(event)
if err != nil {
return nil, err
@@ -231,7 +229,7 @@ func NewHumanPasswordlessCheckSucceededEvent(
}
}
-func HumanPasswordlessCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNCheckSucceededEventMapper(event)
if err != nil {
return nil, err
@@ -260,7 +258,7 @@ func NewHumanPasswordlessCheckFailedEvent(
}
}
-func HumanPasswordlessCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNCheckFailedEventMapper(event)
if err != nil {
return nil, err
@@ -277,11 +275,11 @@ type HumanPasswordlessInitCodeAddedEvent struct {
Expiry time.Duration `json:"expiry"`
}
-func (e *HumanPasswordlessInitCodeAddedEvent) Data() interface{} {
+func (e *HumanPasswordlessInitCodeAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordlessInitCodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordlessInitCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -304,11 +302,11 @@ func NewHumanPasswordlessInitCodeAddedEvent(
}
}
-func HumanPasswordlessInitCodeAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessInitCodeAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanPasswordlessInitCodeAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-BDf32", "unable to unmarshal human passwordless code added")
}
@@ -326,11 +324,11 @@ type HumanPasswordlessInitCodeRequestedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *HumanPasswordlessInitCodeRequestedEvent) Data() interface{} {
+func (e *HumanPasswordlessInitCodeRequestedEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordlessInitCodeRequestedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordlessInitCodeRequestedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -362,11 +360,11 @@ func NewHumanPasswordlessInitCodeRequestedEvent(
}
}
-func HumanPasswordlessInitCodeRequestedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessInitCodeRequestedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanPasswordlessInitCodeRequestedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-VGfg3", "unable to unmarshal human passwordless code delivery added")
}
@@ -379,11 +377,11 @@ type HumanPasswordlessInitCodeSentEvent struct {
ID string `json:"id"`
}
-func (e *HumanPasswordlessInitCodeSentEvent) Data() interface{} {
+func (e *HumanPasswordlessInitCodeSentEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordlessInitCodeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordlessInitCodeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -402,11 +400,11 @@ func NewHumanPasswordlessInitCodeSentEvent(
}
}
-func HumanPasswordlessInitCodeSentEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessInitCodeSentEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanPasswordlessInitCodeSentEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Gtg4j", "unable to unmarshal human passwordless code sent")
}
@@ -419,11 +417,11 @@ type HumanPasswordlessInitCodeCheckFailedEvent struct {
ID string `json:"id"`
}
-func (e *HumanPasswordlessInitCodeCheckFailedEvent) Data() interface{} {
+func (e *HumanPasswordlessInitCodeCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordlessInitCodeCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordlessInitCodeCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -442,11 +440,11 @@ func NewHumanPasswordlessInitCodeCheckFailedEvent(
}
}
-func HumanPasswordlessInitCodeCodeCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessInitCodeCodeCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanPasswordlessInitCodeCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Gtg4j", "unable to unmarshal human passwordless code check failed")
}
@@ -459,11 +457,11 @@ type HumanPasswordlessInitCodeCheckSucceededEvent struct {
ID string `json:"id"`
}
-func (e *HumanPasswordlessInitCodeCheckSucceededEvent) Data() interface{} {
+func (e *HumanPasswordlessInitCodeCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordlessInitCodeCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordlessInitCodeCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -482,11 +480,11 @@ func NewHumanPasswordlessInitCodeCheckSucceededEvent(
}
}
-func HumanPasswordlessInitCodeCodeCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordlessInitCodeCodeCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanPasswordlessInitCodeCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Gtg4j", "unable to unmarshal human passwordless code check succeeded")
}
diff --git a/internal/repository/user/human_mfa_u2f.go b/internal/repository/user/human_mfa_u2f.go
index 096026b872..289a9bb3db 100644
--- a/internal/repository/user/human_mfa_u2f.go
+++ b/internal/repository/user/human_mfa_u2f.go
@@ -5,7 +5,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -44,7 +43,7 @@ func NewHumanU2FAddedEvent(
}
}
-func HumanU2FAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanU2FAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNAddedEventMapper(event)
if err != nil {
return nil, err
@@ -88,7 +87,7 @@ func NewHumanU2FVerifiedEvent(
}
}
-func HumanU2FVerifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanU2FVerifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNVerifiedEventMapper(event)
if err != nil {
return nil, err
@@ -120,7 +119,7 @@ func NewHumanU2FSignCountChangedEvent(
}
}
-func HumanU2FSignCountChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanU2FSignCountChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNSignCountChangedEventMapper(event)
if err != nil {
return nil, err
@@ -156,7 +155,7 @@ func NewHumanU2FRemovedEvent(
}
}
-func HumanU2FRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanU2FRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNRemovedEventMapper(event)
if err != nil {
return nil, err
@@ -185,7 +184,7 @@ func NewHumanU2FBeginLoginEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func HumanU2FBeginLoginEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanU2FBeginLoginEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNBeginLoginEventMapper(event)
if err != nil {
return nil, err
@@ -214,7 +213,7 @@ func NewHumanU2FCheckSucceededEvent(
}
}
-func HumanU2FCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanU2FCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNCheckSucceededEventMapper(event)
if err != nil {
return nil, err
@@ -243,7 +242,7 @@ func NewHumanU2FCheckFailedEvent(
}
}
-func HumanU2FCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanU2FCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := HumanWebAuthNCheckFailedEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/user/human_mfa_web_auth_n.go b/internal/repository/user/human_mfa_web_auth_n.go
index 77f27fb64b..7425803626 100644
--- a/internal/repository/user/human_mfa_web_auth_n.go
+++ b/internal/repository/user/human_mfa_web_auth_n.go
@@ -1,12 +1,9 @@
package user
import (
- "encoding/json"
-
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
type HumanWebAuthNAddedEvent struct {
@@ -17,11 +14,11 @@ type HumanWebAuthNAddedEvent struct {
RPID string `json:"rpID,omitempty"`
}
-func (e *HumanWebAuthNAddedEvent) Data() interface{} {
+func (e *HumanWebAuthNAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanWebAuthNAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanWebAuthNAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -39,11 +36,11 @@ func NewHumanWebAuthNAddedEvent(
}
}
-func HumanWebAuthNAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanWebAuthNAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanWebAuthNAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-tB8sf", "unable to unmarshal human webAuthN added")
}
@@ -63,11 +60,11 @@ type HumanWebAuthNVerifiedEvent struct {
UserAgentID string `json:"userAgentID,omitempty"`
}
-func (e *HumanWebAuthNVerifiedEvent) Data() interface{} {
+func (e *HumanWebAuthNVerifiedEvent) Payload() interface{} {
return e
}
-func (e *HumanWebAuthNVerifiedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanWebAuthNVerifiedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -95,11 +92,11 @@ func NewHumanWebAuthNVerifiedEvent(
}
}
-func HumanWebAuthNVerifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanWebAuthNVerifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webauthNVerified := &HumanWebAuthNVerifiedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webauthNVerified)
+ err := event.Unmarshal(webauthNVerified)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-B0zDs", "unable to unmarshal human webAuthN verified")
}
@@ -113,11 +110,11 @@ type HumanWebAuthNSignCountChangedEvent struct {
SignCount uint32 `json:"signCount"`
}
-func (e *HumanWebAuthNSignCountChangedEvent) Data() interface{} {
+func (e *HumanWebAuthNSignCountChangedEvent) Payload() interface{} {
return e
}
-func (e *HumanWebAuthNSignCountChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanWebAuthNSignCountChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -133,11 +130,11 @@ func NewHumanWebAuthNSignCountChangedEvent(
}
}
-func HumanWebAuthNSignCountChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanWebAuthNSignCountChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webauthNVerified := &HumanWebAuthNSignCountChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webauthNVerified)
+ err := event.Unmarshal(webauthNVerified)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-5Gm0s", "unable to unmarshal human webAuthN sign count")
}
@@ -151,11 +148,11 @@ type HumanWebAuthNRemovedEvent struct {
State domain.MFAState `json:"-"`
}
-func (e *HumanWebAuthNRemovedEvent) Data() interface{} {
+func (e *HumanWebAuthNRemovedEvent) Payload() interface{} {
return e
}
-func (e *HumanWebAuthNRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanWebAuthNRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -169,11 +166,11 @@ func NewHumanWebAuthNRemovedEvent(
}
}
-func HumanWebAuthNRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanWebAuthNRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webauthNVerified := &HumanWebAuthNRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webauthNVerified)
+ err := event.Unmarshal(webauthNVerified)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-gM9sd", "unable to unmarshal human webAuthN token removed")
}
@@ -189,11 +186,11 @@ type HumanWebAuthNBeginLoginEvent struct {
*AuthRequestInfo
}
-func (e *HumanWebAuthNBeginLoginEvent) Data() interface{} {
+func (e *HumanWebAuthNBeginLoginEvent) Payload() interface{} {
return e
}
-func (e *HumanWebAuthNBeginLoginEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanWebAuthNBeginLoginEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -207,11 +204,11 @@ func NewHumanWebAuthNBeginLoginEvent(base *eventstore.BaseEvent, challenge strin
}
}
-func HumanWebAuthNBeginLoginEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanWebAuthNBeginLoginEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanWebAuthNBeginLoginEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-rMb8x", "unable to unmarshal human webAuthN begin login")
}
@@ -223,11 +220,11 @@ type HumanWebAuthNCheckSucceededEvent struct {
*AuthRequestInfo
}
-func (e *HumanWebAuthNCheckSucceededEvent) Data() interface{} {
+func (e *HumanWebAuthNCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *HumanWebAuthNCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanWebAuthNCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -240,11 +237,11 @@ func NewHumanWebAuthNCheckSucceededEvent(
}
}
-func HumanWebAuthNCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanWebAuthNCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanWebAuthNCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-2M0fg", "unable to unmarshal human webAuthN check succeeded")
}
@@ -256,11 +253,11 @@ type HumanWebAuthNCheckFailedEvent struct {
*AuthRequestInfo
}
-func (e *HumanWebAuthNCheckFailedEvent) Data() interface{} {
+func (e *HumanWebAuthNCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *HumanWebAuthNCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanWebAuthNCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -273,11 +270,11 @@ func NewHumanWebAuthNCheckFailedEvent(
}
}
-func HumanWebAuthNCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanWebAuthNCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
webAuthNAdded := &HumanWebAuthNCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, webAuthNAdded)
+ err := event.Unmarshal(webAuthNAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-O0dse", "unable to unmarshal human webAuthN check failed")
}
diff --git a/internal/repository/user/human_password.go b/internal/repository/user/human_password.go
index 0519145174..aaca42dfe3 100644
--- a/internal/repository/user/human_password.go
+++ b/internal/repository/user/human_password.go
@@ -2,7 +2,6 @@ package user
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/http"
@@ -10,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -36,11 +34,11 @@ type HumanPasswordChangedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *HumanPasswordChangedEvent) Data() interface{} {
+func (e *HumanPasswordChangedEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -68,11 +66,11 @@ func NewHumanPasswordChangedEvent(
}
}
-func HumanPasswordChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
humanAdded := &HumanPasswordChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, humanAdded)
+ err := event.Unmarshal(humanAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-4M0sd", "unable to unmarshal human password changed")
}
@@ -91,11 +89,11 @@ type HumanPasswordCodeAddedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *HumanPasswordCodeAddedEvent) Data() interface{} {
+func (e *HumanPasswordCodeAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordCodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -137,11 +135,11 @@ func NewHumanPasswordCodeAddedEventV2(
}
}
-func HumanPasswordCodeAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordCodeAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
humanAdded := &HumanPasswordCodeAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, humanAdded)
+ err := event.Unmarshal(humanAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Ms90d", "unable to unmarshal human password code added")
}
@@ -153,11 +151,11 @@ type HumanPasswordCodeSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanPasswordCodeSentEvent) Data() interface{} {
+func (e *HumanPasswordCodeSentEvent) Payload() interface{} {
return nil
}
-func (e *HumanPasswordCodeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordCodeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -171,7 +169,7 @@ func NewHumanPasswordCodeSentEvent(ctx context.Context, aggregate *eventstore.Ag
}
}
-func HumanPasswordCodeSentEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordCodeSentEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanPasswordCodeSentEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -181,11 +179,11 @@ type HumanPasswordChangeSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanPasswordChangeSentEvent) Data() interface{} {
+func (e *HumanPasswordChangeSentEvent) Payload() interface{} {
return nil
}
-func (e *HumanPasswordChangeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordChangeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -199,7 +197,7 @@ func NewHumanPasswordChangeSentEvent(ctx context.Context, aggregate *eventstore.
}
}
-func HumanPasswordChangeSentEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordChangeSentEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanPasswordChangeSentEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -210,11 +208,11 @@ type HumanPasswordCheckSucceededEvent struct {
*AuthRequestInfo
}
-func (e *HumanPasswordCheckSucceededEvent) Data() interface{} {
+func (e *HumanPasswordCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -233,11 +231,11 @@ func NewHumanPasswordCheckSucceededEvent(
}
}
-func HumanPasswordCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
humanAdded := &HumanPasswordCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, humanAdded)
+ err := event.Unmarshal(humanAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-5M9sd", "unable to unmarshal human password check succeeded")
}
@@ -250,11 +248,11 @@ type HumanPasswordCheckFailedEvent struct {
*AuthRequestInfo
}
-func (e *HumanPasswordCheckFailedEvent) Data() interface{} {
+func (e *HumanPasswordCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -273,11 +271,11 @@ func NewHumanPasswordCheckFailedEvent(
}
}
-func HumanPasswordCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPasswordCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
humanAdded := &HumanPasswordCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, humanAdded)
+ err := event.Unmarshal(humanAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-4m9fs", "unable to unmarshal human password check failed")
}
@@ -290,11 +288,11 @@ type HumanPasswordHashUpdatedEvent struct {
EncodedHash string `json:"encodedHash,omitempty"`
}
-func (e *HumanPasswordHashUpdatedEvent) Data() interface{} {
+func (e *HumanPasswordHashUpdatedEvent) Payload() interface{} {
return e
}
-func (e *HumanPasswordHashUpdatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPasswordHashUpdatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
diff --git a/internal/repository/user/human_phone.go b/internal/repository/user/human_phone.go
index 135b8f899b..7c2302bb4d 100644
--- a/internal/repository/user/human_phone.go
+++ b/internal/repository/user/human_phone.go
@@ -2,7 +2,6 @@ package user
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/http"
@@ -10,7 +9,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -29,11 +27,11 @@ type HumanPhoneChangedEvent struct {
PhoneNumber domain.PhoneNumber `json:"phone,omitempty"`
}
-func (e *HumanPhoneChangedEvent) Data() interface{} {
+func (e *HumanPhoneChangedEvent) Payload() interface{} {
return e
}
-func (e *HumanPhoneChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPhoneChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -48,11 +46,11 @@ func NewHumanPhoneChangedEvent(ctx context.Context, aggregate *eventstore.Aggreg
}
}
-func HumanPhoneChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPhoneChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
phoneChangedEvent := &HumanPhoneChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, phoneChangedEvent)
+ err := event.Unmarshal(phoneChangedEvent)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-5M0pd", "unable to unmarshal human phone changed")
}
@@ -64,11 +62,11 @@ type HumanPhoneRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanPhoneRemovedEvent) Data() interface{} {
+func (e *HumanPhoneRemovedEvent) Payload() interface{} {
return nil
}
-func (e *HumanPhoneRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPhoneRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -82,7 +80,7 @@ func NewHumanPhoneRemovedEvent(ctx context.Context, aggregate *eventstore.Aggreg
}
}
-func HumanPhoneRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPhoneRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanPhoneRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -94,11 +92,11 @@ type HumanPhoneVerifiedEvent struct {
IsPhoneVerified bool `json:"-"`
}
-func (e *HumanPhoneVerifiedEvent) Data() interface{} {
+func (e *HumanPhoneVerifiedEvent) Payload() interface{} {
return nil
}
-func (e *HumanPhoneVerifiedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPhoneVerifiedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -112,7 +110,7 @@ func NewHumanPhoneVerifiedEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func HumanPhoneVerifiedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPhoneVerifiedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanPhoneVerifiedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
IsPhoneVerified: true,
@@ -123,11 +121,11 @@ type HumanPhoneVerificationFailedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanPhoneVerificationFailedEvent) Data() interface{} {
+func (e *HumanPhoneVerificationFailedEvent) Payload() interface{} {
return nil
}
-func (e *HumanPhoneVerificationFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPhoneVerificationFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -141,7 +139,7 @@ func NewHumanPhoneVerificationFailedEvent(ctx context.Context, aggregate *events
}
}
-func HumanPhoneVerificationFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPhoneVerificationFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanPhoneVerificationFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -156,11 +154,11 @@ type HumanPhoneCodeAddedEvent struct {
TriggeredAtOrigin string `json:"triggerOrigin,omitempty"`
}
-func (e *HumanPhoneCodeAddedEvent) Data() interface{} {
+func (e *HumanPhoneCodeAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanPhoneCodeAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPhoneCodeAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -196,11 +194,11 @@ func NewHumanPhoneCodeAddedEventV2(
}
}
-func HumanPhoneCodeAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPhoneCodeAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
codeAdded := &HumanPhoneCodeAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, codeAdded)
+ err := event.Unmarshal(codeAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-6Ms9d", "unable to unmarshal human phone code added")
}
@@ -212,11 +210,11 @@ type HumanPhoneCodeSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *HumanPhoneCodeSentEvent) Data() interface{} {
+func (e *HumanPhoneCodeSentEvent) Payload() interface{} {
return e
}
-func (e *HumanPhoneCodeSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanPhoneCodeSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -230,7 +228,7 @@ func NewHumanPhoneCodeSentEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func HumanPhoneCodeSentEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanPhoneCodeSentEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &HumanPhoneCodeSentEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/repository/user/human_profile.go b/internal/repository/user/human_profile.go
index 24aeeab724..611591dbf8 100644
--- a/internal/repository/user/human_profile.go
+++ b/internal/repository/user/human_profile.go
@@ -2,13 +2,10 @@ package user
import (
"context"
- "encoding/json"
-
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
"golang.org/x/text/language"
)
@@ -28,11 +25,11 @@ type HumanProfileChangedEvent struct {
Gender *domain.Gender `json:"gender,omitempty"`
}
-func (e *HumanProfileChangedEvent) Data() interface{} {
+func (e *HumanProfileChangedEvent) Payload() interface{} {
return e
}
-func (e *HumanProfileChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanProfileChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -95,11 +92,11 @@ func ChangeGender(gender domain.Gender) func(event *HumanProfileChangedEvent) {
}
}
-func HumanProfileChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanProfileChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
profileChanged := &HumanProfileChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, profileChanged)
+ err := event.Unmarshal(profileChanged)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-5M0pd", "unable to unmarshal human profile changed")
}
diff --git a/internal/repository/user/human_refresh_token.go b/internal/repository/user/human_refresh_token.go
index e2e9bd463a..f17d906f3e 100644
--- a/internal/repository/user/human_refresh_token.go
+++ b/internal/repository/user/human_refresh_token.go
@@ -2,13 +2,10 @@ package user
import (
"context"
- "encoding/json"
"time"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -33,11 +30,11 @@ type HumanRefreshTokenAddedEvent struct {
PreferredLanguage string `json:"preferredLanguage"`
}
-func (e *HumanRefreshTokenAddedEvent) Data() interface{} {
+func (e *HumanRefreshTokenAddedEvent) Payload() interface{} {
return e
}
-func (e *HumanRefreshTokenAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanRefreshTokenAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -78,11 +75,11 @@ func NewHumanRefreshTokenAddedEvent(
}
}
-func HumanRefreshTokenAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanRefreshTokenAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
refreshTokenAdded := &HumanRefreshTokenAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, refreshTokenAdded)
+ err := event.Unmarshal(refreshTokenAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-DGr14", "unable to unmarshal refresh token added")
}
@@ -98,11 +95,11 @@ type HumanRefreshTokenRenewedEvent struct {
IdleExpiration time.Duration `json:"idleExpiration"`
}
-func (e *HumanRefreshTokenRenewedEvent) Data() interface{} {
+func (e *HumanRefreshTokenRenewedEvent) Payload() interface{} {
return e
}
-func (e *HumanRefreshTokenRenewedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanRefreshTokenRenewedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -129,11 +126,11 @@ func NewHumanRefreshTokenRenewedEvent(
}
}
-func HumanRefreshTokenRenewedEventEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanRefreshTokenRenewedEventEventMapper(event eventstore.Event) (eventstore.Event, error) {
tokenAdded := &HumanRefreshTokenRenewedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, tokenAdded)
+ err := event.Unmarshal(tokenAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-GBt21", "unable to unmarshal refresh token renewed")
}
@@ -147,11 +144,11 @@ type HumanRefreshTokenRemovedEvent struct {
TokenID string `json:"tokenId"`
}
-func (e *HumanRefreshTokenRemovedEvent) Data() interface{} {
+func (e *HumanRefreshTokenRemovedEvent) Payload() interface{} {
return e
}
-func (e *HumanRefreshTokenRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *HumanRefreshTokenRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -174,11 +171,11 @@ func NewHumanRefreshTokenRemovedEvent(
}
}
-func HumanRefreshTokenRemovedEventEventMapper(event *repository.Event) (eventstore.Event, error) {
+func HumanRefreshTokenRemovedEventEventMapper(event eventstore.Event) (eventstore.Event, error) {
tokenAdded := &HumanRefreshTokenRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, tokenAdded)
+ err := event.Unmarshal(tokenAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Dggs2", "unable to unmarshal refresh token removed")
}
diff --git a/internal/repository/user/machine.go b/internal/repository/user/machine.go
index 87cb57ed1b..7faea5ac95 100644
--- a/internal/repository/user/machine.go
+++ b/internal/repository/user/machine.go
@@ -2,13 +2,10 @@ package user
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/eventstore"
-
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
const (
@@ -28,12 +25,12 @@ type MachineAddedEvent struct {
AccessTokenType domain.OIDCTokenType `json:"accessTokenType,omitempty"`
}
-func (e *MachineAddedEvent) Data() interface{} {
+func (e *MachineAddedEvent) Payload() interface{} {
return e
}
-func (e *MachineAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain)}
+func (e *MachineAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain)}
}
func NewMachineAddedEvent(
@@ -59,11 +56,11 @@ func NewMachineAddedEvent(
}
}
-func MachineAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
machineAdded := &MachineAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, machineAdded)
+ err := event.Unmarshal(machineAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-tMv9s", "unable to unmarshal machine added")
}
@@ -79,11 +76,11 @@ type MachineChangedEvent struct {
AccessTokenType *domain.OIDCTokenType `json:"accessTokenType,omitempty"`
}
-func (e *MachineChangedEvent) Data() interface{} {
+func (e *MachineChangedEvent) Payload() interface{} {
return e
}
-func (e *MachineChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MachineChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -128,11 +125,11 @@ func ChangeAccessTokenType(accessTokenType domain.OIDCTokenType) func(event *Mac
}
}
-func MachineChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
machineChanged := &MachineChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, machineChanged)
+ err := event.Unmarshal(machineChanged)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-4M9ds", "unable to unmarshal machine changed")
}
diff --git a/internal/repository/user/machine_key.go b/internal/repository/user/machine_key.go
index 8c85f04c44..283e8240ec 100644
--- a/internal/repository/user/machine_key.go
+++ b/internal/repository/user/machine_key.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -26,11 +25,11 @@ type MachineKeyAddedEvent struct {
PublicKey []byte `json:"publicKey,omitempty"`
}
-func (e *MachineKeyAddedEvent) Data() interface{} {
+func (e *MachineKeyAddedEvent) Payload() interface{} {
return e
}
-func (e *MachineKeyAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MachineKeyAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -55,11 +54,11 @@ func NewMachineKeyAddedEvent(
}
}
-func MachineKeyAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineKeyAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
machineKeyAdded := &MachineKeyAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, machineKeyAdded)
+ err := event.Unmarshal(machineKeyAdded)
if err != nil {
//first events had wrong payload.
// the keys were removed later, that's why we ignore them here.
@@ -78,11 +77,11 @@ type MachineKeyRemovedEvent struct {
KeyID string `json:"keyId,omitempty"`
}
-func (e *MachineKeyRemovedEvent) Data() interface{} {
+func (e *MachineKeyRemovedEvent) Payload() interface{} {
return e
}
-func (e *MachineKeyRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MachineKeyRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -101,11 +100,11 @@ func NewMachineKeyRemovedEvent(
}
}
-func MachineKeyRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineKeyRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
machineRemoved := &MachineKeyRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, machineRemoved)
+ err := event.Unmarshal(machineRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-5Gm9s", "unable to unmarshal machine key removed")
}
diff --git a/internal/repository/user/machine_secret.go b/internal/repository/user/machine_secret.go
index e21595b3c8..041d938f8e 100644
--- a/internal/repository/user/machine_secret.go
+++ b/internal/repository/user/machine_secret.go
@@ -2,12 +2,10 @@ package user
import (
"context"
- "encoding/json"
"github.com/zitadel/zitadel/internal/crypto"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -24,11 +22,11 @@ type MachineSecretSetEvent struct {
ClientSecret *crypto.CryptoValue `json:"clientSecret,omitempty"`
}
-func (e *MachineSecretSetEvent) Data() interface{} {
+func (e *MachineSecretSetEvent) Payload() interface{} {
return e
}
-func (e *MachineSecretSetEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MachineSecretSetEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -47,11 +45,11 @@ func NewMachineSecretSetEvent(
}
}
-func MachineSecretSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineSecretSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
credentialsSet := &MachineSecretSetEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, credentialsSet)
+ err := event.Unmarshal(credentialsSet)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-lopbqu", "unable to unmarshal machine secret set")
}
@@ -63,11 +61,11 @@ type MachineSecretRemovedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *MachineSecretRemovedEvent) Data() interface{} {
+func (e *MachineSecretRemovedEvent) Payload() interface{} {
return e
}
-func (e *MachineSecretRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MachineSecretRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -84,11 +82,11 @@ func NewMachineSecretRemovedEvent(
}
}
-func MachineSecretRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineSecretRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
credentialsRemoved := &MachineSecretRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, credentialsRemoved)
+ err := event.Unmarshal(credentialsRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-quox9j2", "unable to unmarshal machine secret removed")
}
@@ -100,11 +98,11 @@ type MachineSecretCheckSucceededEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *MachineSecretCheckSucceededEvent) Data() interface{} {
+func (e *MachineSecretCheckSucceededEvent) Payload() interface{} {
return e
}
-func (e *MachineSecretCheckSucceededEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MachineSecretCheckSucceededEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -121,11 +119,11 @@ func NewMachineSecretCheckSucceededEvent(
}
}
-func MachineSecretCheckSucceededEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineSecretCheckSucceededEventMapper(event eventstore.Event) (eventstore.Event, error) {
check := &MachineSecretCheckSucceededEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, check)
+ err := event.Unmarshal(check)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-x002n1p", "unable to unmarshal machine secret check succeeded")
}
@@ -137,11 +135,11 @@ type MachineSecretCheckFailedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *MachineSecretCheckFailedEvent) Data() interface{} {
+func (e *MachineSecretCheckFailedEvent) Payload() interface{} {
return e
}
-func (e *MachineSecretCheckFailedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *MachineSecretCheckFailedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -158,11 +156,11 @@ func NewMachineSecretCheckFailedEvent(
}
}
-func MachineSecretCheckFailedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MachineSecretCheckFailedEventMapper(event eventstore.Event) (eventstore.Event, error) {
check := &MachineSecretCheckFailedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, check)
+ err := event.Unmarshal(check)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-x7901b1l", "unable to unmarshal machine secret check failed")
}
diff --git a/internal/repository/user/metadata.go b/internal/repository/user/metadata.go
index 64e621f548..cd4cd26b80 100644
--- a/internal/repository/user/metadata.go
+++ b/internal/repository/user/metadata.go
@@ -4,7 +4,6 @@ import (
"context"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/metadata"
)
@@ -30,7 +29,7 @@ func NewMetadataSetEvent(ctx context.Context, aggregate *eventstore.Aggregate, k
}
}
-func MetadataSetEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MetadataSetEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := metadata.SetEventMapper(event)
if err != nil {
return nil, err
@@ -54,7 +53,7 @@ func NewMetadataRemovedEvent(ctx context.Context, aggregate *eventstore.Aggregat
}
}
-func MetadataRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MetadataRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := metadata.RemovedEventMapper(event)
if err != nil {
return nil, err
@@ -78,7 +77,7 @@ func NewMetadataRemovedAllEvent(ctx context.Context, aggregate *eventstore.Aggre
}
}
-func MetadataRemovedAllEventMapper(event *repository.Event) (eventstore.Event, error) {
+func MetadataRemovedAllEventMapper(event eventstore.Event) (eventstore.Event, error) {
e, err := metadata.RemovedAllEventMapper(event)
if err != nil {
return nil, err
diff --git a/internal/repository/user/personal_access_token.go b/internal/repository/user/personal_access_token.go
index 3e7cfa570c..10432fe22e 100644
--- a/internal/repository/user/personal_access_token.go
+++ b/internal/repository/user/personal_access_token.go
@@ -2,12 +2,10 @@ package user
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -24,11 +22,11 @@ type PersonalAccessTokenAddedEvent struct {
Scopes []string `json:"scopes"`
}
-func (e *PersonalAccessTokenAddedEvent) Data() interface{} {
+func (e *PersonalAccessTokenAddedEvent) Payload() interface{} {
return e
}
-func (e *PersonalAccessTokenAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PersonalAccessTokenAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -51,11 +49,11 @@ func NewPersonalAccessTokenAddedEvent(
}
}
-func PersonalAccessTokenAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PersonalAccessTokenAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
tokenAdded := &PersonalAccessTokenAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, tokenAdded)
+ err := event.Unmarshal(tokenAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Dbges", "unable to unmarshal token added")
}
@@ -69,11 +67,11 @@ type PersonalAccessTokenRemovedEvent struct {
TokenID string `json:"tokenId"`
}
-func (e *PersonalAccessTokenRemovedEvent) Data() interface{} {
+func (e *PersonalAccessTokenRemovedEvent) Payload() interface{} {
return e
}
-func (e *PersonalAccessTokenRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *PersonalAccessTokenRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -92,11 +90,11 @@ func NewPersonalAccessTokenRemovedEvent(
}
}
-func PersonalAccessTokenRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func PersonalAccessTokenRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
tokenRemoved := &PersonalAccessTokenRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, tokenRemoved)
+ err := event.Unmarshal(tokenRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-Dbneg", "unable to unmarshal token removed")
}
diff --git a/internal/repository/user/user.go b/internal/repository/user/user.go
index 1e6e7fbe65..df99eb2e74 100644
--- a/internal/repository/user/user.go
+++ b/internal/repository/user/user.go
@@ -2,14 +2,12 @@ package user
import (
"context"
- "encoding/json"
"time"
"github.com/zitadel/zitadel/internal/api/http"
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -27,7 +25,7 @@ const (
UserUserNameChangedType = userEventTypePrefix + "username.changed"
)
-func NewAddUsernameUniqueConstraint(userName, resourceOwner string, userLoginMustBeDomain bool) *eventstore.EventUniqueConstraint {
+func NewAddUsernameUniqueConstraint(userName, resourceOwner string, userLoginMustBeDomain bool) *eventstore.UniqueConstraint {
uniqueUserName := userName
if userLoginMustBeDomain {
uniqueUserName = userName + resourceOwner
@@ -38,12 +36,12 @@ func NewAddUsernameUniqueConstraint(userName, resourceOwner string, userLoginMus
"Errors.User.AlreadyExists")
}
-func NewRemoveUsernameUniqueConstraint(userName, resourceOwner string, userLoginMustBeDomain bool) *eventstore.EventUniqueConstraint {
+func NewRemoveUsernameUniqueConstraint(userName, resourceOwner string, userLoginMustBeDomain bool) *eventstore.UniqueConstraint {
uniqueUserName := userName
if userLoginMustBeDomain {
uniqueUserName = userName + resourceOwner
}
- return eventstore.NewRemoveEventUniqueConstraint(
+ return eventstore.NewRemoveUniqueConstraint(
UniqueUsername,
uniqueUserName)
}
@@ -52,11 +50,11 @@ type UserLockedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *UserLockedEvent) Data() interface{} {
+func (e *UserLockedEvent) Payload() interface{} {
return nil
}
-func (e *UserLockedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserLockedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -70,7 +68,7 @@ func NewUserLockedEvent(ctx context.Context, aggregate *eventstore.Aggregate) *U
}
}
-func UserLockedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserLockedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserLockedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -80,11 +78,11 @@ type UserUnlockedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *UserUnlockedEvent) Data() interface{} {
+func (e *UserUnlockedEvent) Payload() interface{} {
return nil
}
-func (e *UserUnlockedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserUnlockedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -98,7 +96,7 @@ func NewUserUnlockedEvent(ctx context.Context, aggregate *eventstore.Aggregate)
}
}
-func UserUnlockedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserUnlockedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserUnlockedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -108,11 +106,11 @@ type UserDeactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *UserDeactivatedEvent) Data() interface{} {
+func (e *UserDeactivatedEvent) Payload() interface{} {
return nil
}
-func (e *UserDeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserDeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -126,7 +124,7 @@ func NewUserDeactivatedEvent(ctx context.Context, aggregate *eventstore.Aggregat
}
}
-func UserDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserDeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -136,11 +134,11 @@ type UserReactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *UserReactivatedEvent) Data() interface{} {
+func (e *UserReactivatedEvent) Payload() interface{} {
return nil
}
-func (e *UserReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -154,7 +152,7 @@ func NewUserReactivatedEvent(ctx context.Context, aggregate *eventstore.Aggregat
}
}
-func UserReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -168,12 +166,12 @@ type UserRemovedEvent struct {
loginMustBeDomain bool
}
-func (e *UserRemovedEvent) Data() interface{} {
+func (e *UserRemovedEvent) Payload() interface{} {
return nil
}
-func (e *UserRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- events := make([]*eventstore.EventUniqueConstraint, 0)
+func (e *UserRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ events := make([]*eventstore.UniqueConstraint, 0)
if e.userName != "" {
events = append(events, NewRemoveUsernameUniqueConstraint(e.userName, e.Aggregate().ResourceOwner, e.loginMustBeDomain))
}
@@ -202,7 +200,7 @@ func NewUserRemovedEvent(
}
}
-func UserRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -221,11 +219,11 @@ type UserTokenAddedEvent struct {
PreferredLanguage string `json:"preferredLanguage"`
}
-func (e *UserTokenAddedEvent) Data() interface{} {
+func (e *UserTokenAddedEvent) Payload() interface{} {
return e
}
-func (e *UserTokenAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserTokenAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -258,11 +256,11 @@ func NewUserTokenAddedEvent(
}
}
-func UserTokenAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserTokenAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
tokenAdded := &UserTokenAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, tokenAdded)
+ err := event.Unmarshal(tokenAdded)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-7M9sd", "unable to unmarshal token added")
}
@@ -276,11 +274,11 @@ type UserTokenRemovedEvent struct {
TokenID string `json:"tokenId"`
}
-func (e *UserTokenRemovedEvent) Data() interface{} {
+func (e *UserTokenRemovedEvent) Payload() interface{} {
return e
}
-func (e *UserTokenRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserTokenRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -299,11 +297,11 @@ func NewUserTokenRemovedEvent(
}
}
-func UserTokenRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserTokenRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
tokenRemoved := &UserTokenRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, tokenRemoved)
+ err := event.Unmarshal(tokenRemoved)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-7M9sd", "unable to unmarshal token added")
}
@@ -320,12 +318,12 @@ type DomainClaimedEvent struct {
userLoginMustBeDomain bool
}
-func (e *DomainClaimedEvent) Data() interface{} {
+func (e *DomainClaimedEvent) Payload() interface{} {
return e
}
-func (e *DomainClaimedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{
+func (e *DomainClaimedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{
NewRemoveUsernameUniqueConstraint(e.oldUserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain),
NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain),
}
@@ -355,11 +353,11 @@ func NewDomainClaimedEvent(
}
}
-func DomainClaimedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainClaimedEventMapper(event eventstore.Event) (eventstore.Event, error) {
domainClaimed := &DomainClaimedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, domainClaimed)
+ err := event.Unmarshal(domainClaimed)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-aR8jc", "unable to unmarshal domain claimed")
}
@@ -371,11 +369,11 @@ type DomainClaimedSentEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *DomainClaimedSentEvent) Data() interface{} {
+func (e *DomainClaimedSentEvent) Payload() interface{} {
return nil
}
-func (e *DomainClaimedSentEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *DomainClaimedSentEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -392,7 +390,7 @@ func NewDomainClaimedSentEvent(
}
}
-func DomainClaimedSentEventMapper(event *repository.Event) (eventstore.Event, error) {
+func DomainClaimedSentEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &DomainClaimedSentEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -407,12 +405,12 @@ type UsernameChangedEvent struct {
oldUserLoginMustBeDomain bool
}
-func (e *UsernameChangedEvent) Data() interface{} {
+func (e *UsernameChangedEvent) Payload() interface{} {
return e
}
-func (e *UsernameChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{
+func (e *UsernameChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{
NewRemoveUsernameUniqueConstraint(e.oldUserName, e.Aggregate().ResourceOwner, e.oldUserLoginMustBeDomain),
NewAddUsernameUniqueConstraint(e.UserName, e.Aggregate().ResourceOwner, e.userLoginMustBeDomain),
}
@@ -453,11 +451,11 @@ func UsernameChangedEventWithPolicyChange() UsernameChangedEventOption {
}
}
-func UsernameChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UsernameChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
domainClaimed := &UsernameChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, domainClaimed)
+ err := event.Unmarshal(domainClaimed)
if err != nil {
return nil, errors.ThrowInternal(err, "USER-4Bm9s", "unable to unmarshal username changed")
}
diff --git a/internal/repository/usergrant/user_grant.go b/internal/repository/usergrant/user_grant.go
index fc887d2a3b..10d6cfcf1f 100644
--- a/internal/repository/usergrant/user_grant.go
+++ b/internal/repository/usergrant/user_grant.go
@@ -2,13 +2,11 @@ package usergrant
import (
"context"
- "encoding/json"
"fmt"
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore/repository"
)
const (
@@ -23,15 +21,15 @@ const (
UserGrantReactivatedType = userGrantEventTypePrefix + "reactivated"
)
-func NewAddUserGrantUniqueConstraint(resourceOwner, userID, projectID, projectGrantID string) *eventstore.EventUniqueConstraint {
+func NewAddUserGrantUniqueConstraint(resourceOwner, userID, projectID, projectGrantID string) *eventstore.UniqueConstraint {
return eventstore.NewAddEventUniqueConstraint(
UniqueUserGrant,
fmt.Sprintf("%s:%s:%s:%v", resourceOwner, userID, projectID, projectGrantID),
"Errors.UserGrant.AlreadyExists")
}
-func NewRemoveUserGrantUniqueConstraint(resourceOwner, userID, projectID, projectGrantID string) *eventstore.EventUniqueConstraint {
- return eventstore.NewRemoveEventUniqueConstraint(
+func NewRemoveUserGrantUniqueConstraint(resourceOwner, userID, projectID, projectGrantID string) *eventstore.UniqueConstraint {
+ return eventstore.NewRemoveUniqueConstraint(
UniqueUserGrant,
fmt.Sprintf("%s:%s:%s:%s", resourceOwner, userID, projectID, projectGrantID))
}
@@ -45,12 +43,12 @@ type UserGrantAddedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
-func (e *UserGrantAddedEvent) Data() interface{} {
+func (e *UserGrantAddedEvent) Payload() interface{} {
return e
}
-func (e *UserGrantAddedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewAddUserGrantUniqueConstraint(e.Aggregate().ResourceOwner, e.UserID, e.ProjectID, e.ProjectGrantID)}
+func (e *UserGrantAddedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewAddUserGrantUniqueConstraint(e.Aggregate().ResourceOwner, e.UserID, e.ProjectID, e.ProjectGrantID)}
}
func NewUserGrantAddedEvent(
@@ -73,12 +71,12 @@ func NewUserGrantAddedEvent(
}
}
-func UserGrantAddedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserGrantAddedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &UserGrantAddedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "UGRANT-0p9ol", "unable to unmarshal user grant")
}
@@ -91,11 +89,11 @@ type UserGrantChangedEvent struct {
RoleKeys []string `json:"roleKeys"`
}
-func (e *UserGrantChangedEvent) Data() interface{} {
+func (e *UserGrantChangedEvent) Payload() interface{} {
return e
}
-func (e *UserGrantChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserGrantChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -113,12 +111,12 @@ func NewUserGrantChangedEvent(
}
}
-func UserGrantChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserGrantChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &UserGrantChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "UGRANT-4M0sd", "unable to unmarshal user grant")
}
@@ -131,11 +129,11 @@ type UserGrantCascadeChangedEvent struct {
RoleKeys []string `json:"roleKeys,omitempty"`
}
-func (e *UserGrantCascadeChangedEvent) Data() interface{} {
+func (e *UserGrantCascadeChangedEvent) Payload() interface{} {
return e
}
-func (e *UserGrantCascadeChangedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserGrantCascadeChangedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -153,12 +151,12 @@ func NewUserGrantCascadeChangedEvent(
}
}
-func UserGrantCascadeChangedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserGrantCascadeChangedEventMapper(event eventstore.Event) (eventstore.Event, error) {
e := &UserGrantChangedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}
- err := json.Unmarshal(event.Data, e)
+ err := event.Unmarshal(e)
if err != nil {
return nil, errors.ThrowInternal(err, "UGRANT-Gs9df", "unable to unmarshal user grant")
}
@@ -173,12 +171,12 @@ type UserGrantRemovedEvent struct {
projectGrantID string `json:"-"`
}
-func (e *UserGrantRemovedEvent) Data() interface{} {
+func (e *UserGrantRemovedEvent) Payload() interface{} {
return nil
}
-func (e *UserGrantRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveUserGrantUniqueConstraint(e.Aggregate().ResourceOwner, e.userID, e.projectID, e.projectGrantID)}
+func (e *UserGrantRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveUserGrantUniqueConstraint(e.Aggregate().ResourceOwner, e.userID, e.projectID, e.projectGrantID)}
}
func NewUserGrantRemovedEvent(
@@ -200,7 +198,7 @@ func NewUserGrantRemovedEvent(
}
}
-func UserGrantRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserGrantRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserGrantRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -213,12 +211,12 @@ type UserGrantCascadeRemovedEvent struct {
projectGrantID string `json:"-"`
}
-func (e *UserGrantCascadeRemovedEvent) Data() interface{} {
+func (e *UserGrantCascadeRemovedEvent) Payload() interface{} {
return nil
}
-func (e *UserGrantCascadeRemovedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
- return []*eventstore.EventUniqueConstraint{NewRemoveUserGrantUniqueConstraint(e.Aggregate().ResourceOwner, e.userID, e.projectID, e.projectGrantID)}
+func (e *UserGrantCascadeRemovedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
+ return []*eventstore.UniqueConstraint{NewRemoveUserGrantUniqueConstraint(e.Aggregate().ResourceOwner, e.userID, e.projectID, e.projectGrantID)}
}
func NewUserGrantCascadeRemovedEvent(
@@ -240,7 +238,7 @@ func NewUserGrantCascadeRemovedEvent(
}
}
-func UserGrantCascadeRemovedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserGrantCascadeRemovedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserGrantCascadeRemovedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -250,11 +248,11 @@ type UserGrantDeactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *UserGrantDeactivatedEvent) Data() interface{} {
+func (e *UserGrantDeactivatedEvent) Payload() interface{} {
return nil
}
-func (e *UserGrantDeactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserGrantDeactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -268,7 +266,7 @@ func NewUserGrantDeactivatedEvent(ctx context.Context, aggregate *eventstore.Agg
}
}
-func UserGrantDeactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserGrantDeactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserGrantDeactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
@@ -278,11 +276,11 @@ type UserGrantReactivatedEvent struct {
eventstore.BaseEvent `json:"-"`
}
-func (e *UserGrantReactivatedEvent) Data() interface{} {
+func (e *UserGrantReactivatedEvent) Payload() interface{} {
return nil
}
-func (e *UserGrantReactivatedEvent) UniqueConstraints() []*eventstore.EventUniqueConstraint {
+func (e *UserGrantReactivatedEvent) UniqueConstraints() []*eventstore.UniqueConstraint {
return nil
}
@@ -296,7 +294,7 @@ func NewUserGrantReactivatedEvent(ctx context.Context, aggregate *eventstore.Agg
}
}
-func UserGrantReactivatedEventMapper(event *repository.Event) (eventstore.Event, error) {
+func UserGrantReactivatedEventMapper(event eventstore.Event) (eventstore.Event, error) {
return &UserGrantReactivatedEvent{
BaseEvent: *eventstore.BaseEventFromRepo(event),
}, nil
diff --git a/internal/user/repository/eventsourcing/model/auth_request.go b/internal/user/repository/eventsourcing/model/auth_request.go
index f41aaf8437..62b5fe48c1 100644
--- a/internal/user/repository/eventsourcing/model/auth_request.go
+++ b/internal/user/repository/eventsourcing/model/auth_request.go
@@ -1,13 +1,12 @@
package model
import (
- "encoding/json"
"net"
"github.com/zitadel/logging"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
)
type AuthRequest struct {
@@ -23,8 +22,8 @@ type BrowserInfo struct {
RemoteIP net.IP `json:"remoteIP,omitempty"`
}
-func (a *AuthRequest) SetData(event *es_models.Event) error {
- if err := json.Unmarshal(event.Data, a); err != nil {
+func (a *AuthRequest) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(a); err != nil {
logging.Log("EVEN-T5df6").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-yGmhh", "could not unmarshal event")
}
diff --git a/internal/user/repository/eventsourcing/model/otp.go b/internal/user/repository/eventsourcing/model/otp.go
index 5057ffaaa0..f5bf36592f 100644
--- a/internal/user/repository/eventsourcing/model/otp.go
+++ b/internal/user/repository/eventsourcing/model/otp.go
@@ -1,12 +1,11 @@
package model
import (
- "encoding/json"
-
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/crypto"
caos_errs "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/user/model"
)
@@ -22,7 +21,7 @@ type OTPVerified struct {
UserAgentID string `json:"userAgentID,omitempty"`
}
-func (u *Human) appendOTPAddedEvent(event *es_models.Event) error {
+func (u *Human) appendOTPAddedEvent(event eventstore.Event) error {
u.OTP = &OTP{
State: int32(model.MFAStateNotReady),
}
@@ -37,17 +36,17 @@ func (u *Human) appendOTPRemovedEvent() {
u.OTP = nil
}
-func (o *OTP) setData(event *es_models.Event) error {
+func (o *OTP) setData(event eventstore.Event) error {
o.ObjectRoot.AppendEvent(event)
- if err := json.Unmarshal(event.Data, o); err != nil {
+ if err := event.Unmarshal(o); err != nil {
logging.Log("EVEN-d9soe").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-lo023", "could not unmarshal event")
}
return nil
}
-func (o *OTPVerified) SetData(event *es_models.Event) error {
- if err := json.Unmarshal(event.Data, o); err != nil {
+func (o *OTPVerified) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(o); err != nil {
logging.Log("EVEN-BF421").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-GB6hj", "could not unmarshal event")
}
diff --git a/internal/user/repository/eventsourcing/model/password.go b/internal/user/repository/eventsourcing/model/password.go
index 6c74141113..e9d3e58f3a 100644
--- a/internal/user/repository/eventsourcing/model/password.go
+++ b/internal/user/repository/eventsourcing/model/password.go
@@ -1,13 +1,13 @@
package model
import (
- "encoding/json"
"time"
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/crypto"
caos_errs "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
)
@@ -32,42 +32,42 @@ type PasswordChange struct {
UserAgentID string `json:"userAgentID,omitempty"`
}
-func (u *Human) appendUserPasswordChangedEvent(event *es_models.Event) error {
+func (u *Human) appendUserPasswordChangedEvent(event eventstore.Event) error {
u.Password = new(Password)
err := u.Password.setData(event)
if err != nil {
return err
}
- u.Password.ObjectRoot.CreationDate = event.CreationDate
+ u.Password.ObjectRoot.CreationDate = event.CreatedAt()
return nil
}
-func (u *Human) appendPasswordSetRequestedEvent(event *es_models.Event) error {
+func (u *Human) appendPasswordSetRequestedEvent(event eventstore.Event) error {
u.PasswordCode = new(PasswordCode)
return u.PasswordCode.SetData(event)
}
-func (pw *Password) setData(event *es_models.Event) error {
+func (pw *Password) setData(event eventstore.Event) error {
pw.ObjectRoot.AppendEvent(event)
- if err := json.Unmarshal(event.Data, pw); err != nil {
+ if err := event.Unmarshal(pw); err != nil {
logging.Log("EVEN-dks93").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-sl9xlo2rsw", "could not unmarshal event")
}
return nil
}
-func (c *PasswordCode) SetData(event *es_models.Event) error {
+func (c *PasswordCode) SetData(event eventstore.Event) error {
c.ObjectRoot.AppendEvent(event)
- c.CreationDate = event.CreationDate
- if err := json.Unmarshal(event.Data, c); err != nil {
+ c.CreationDate = event.CreatedAt()
+ if err := event.Unmarshal(c); err != nil {
logging.Log("EVEN-lo0y2").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-q21dr", "could not unmarshal event")
}
return nil
}
-func (pw *PasswordChange) SetData(event *es_models.Event) error {
- if err := json.Unmarshal(event.Data, pw); err != nil {
+func (pw *PasswordChange) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(pw); err != nil {
logging.Log("EVEN-ADs31").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-BDd32", "could not unmarshal event")
}
diff --git a/internal/user/repository/eventsourcing/model/token.go b/internal/user/repository/eventsourcing/model/token.go
index cf3b46da80..57718c8383 100644
--- a/internal/user/repository/eventsourcing/model/token.go
+++ b/internal/user/repository/eventsourcing/model/token.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
user_repo "github.com/zitadel/zitadel/internal/repository/user"
)
@@ -16,13 +15,13 @@ import (
type Token struct {
es_models.ObjectRoot
- TokenID string `json:"tokenId" gorm:"column:token_id"`
- ApplicationID string `json:"applicationId" gorm:"column:application_id"`
- UserAgentID string `json:"userAgentId" gorm:"column:user_agent_id"`
- Audience database.StringArray `json:"audience" gorm:"column:audience"`
- Scopes database.StringArray `json:"scopes" gorm:"column:scopes"`
- Expiration time.Time `json:"expiration" gorm:"column:expiration"`
- PreferredLanguage string `json:"preferredLanguage" gorm:"column:preferred_language"`
+ TokenID string `json:"tokenId" gorm:"column:token_id"`
+ ApplicationID string `json:"applicationId" gorm:"column:application_id"`
+ UserAgentID string `json:"userAgentId" gorm:"column:user_agent_id"`
+ Audience database.TextArray[string] `json:"audience" gorm:"column:audience"`
+ Scopes database.TextArray[string] `json:"scopes" gorm:"column:scopes"`
+ Expiration time.Time `json:"expiration" gorm:"column:expiration"`
+ PreferredLanguage string `json:"preferredLanguage" gorm:"column:preferred_language"`
}
func (t *Token) AppendEvents(events ...*es_models.Event) error {
@@ -36,8 +35,7 @@ func (t *Token) AppendEvents(events ...*es_models.Event) error {
}
func (t *Token) AppendEvent(event *es_models.Event) error {
- switch eventstore.EventType(event.Type) {
- case user_repo.UserTokenAddedType:
+ if event.Typ == user_repo.UserTokenAddedType {
err := t.setData(event)
if err != nil {
return err
diff --git a/internal/user/repository/eventsourcing/model/user.go b/internal/user/repository/eventsourcing/model/user.go
index ec5a33e2a0..36cba95eae 100644
--- a/internal/user/repository/eventsourcing/model/user.go
+++ b/internal/user/repository/eventsourcing/model/user.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/errors"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
"github.com/zitadel/zitadel/internal/user/model"
@@ -40,7 +39,7 @@ func (u *User) AppendEvents(events ...*es_models.Event) error {
func (u *User) AppendEvent(event *es_models.Event) error {
u.ObjectRoot.AppendEvent(event)
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case user.UserV1AddedType,
user.HumanAddedType,
user.MachineAddedEventType,
@@ -72,11 +71,11 @@ func (u *User) AppendEvent(event *es_models.Event) error {
u.Machine.user = u
return u.Machine.AppendEvent(event)
}
- if strings.HasPrefix(string(event.Type), "user.human") || event.AggregateVersion == "v1" {
+ if strings.HasPrefix(string(event.Typ), "user.human") || event.AggregateVersion == "v1" {
u.Human = &Human{user: u}
return u.Human.AppendEvent(event)
}
- if strings.HasPrefix(string(event.Type), "user.machine") {
+ if strings.HasPrefix(string(event.Typ), "user.machine") {
u.Machine = &Machine{user: u}
return u.Machine.AppendEvent(event)
}
diff --git a/internal/user/repository/eventsourcing/model/user_human.go b/internal/user/repository/eventsourcing/model/user_human.go
index 068e1af97e..2df0d5bb72 100644
--- a/internal/user/repository/eventsourcing/model/user_human.go
+++ b/internal/user/repository/eventsourcing/model/user_human.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/crypto"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
"github.com/zitadel/zitadel/internal/user/model"
@@ -50,7 +49,7 @@ func (p *Human) AppendEvents(events ...*es_models.Event) error {
}
func (h *Human) AppendEvent(event *es_models.Event) (err error) {
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case user.UserV1AddedType,
user.UserV1RegisteredType,
user.UserV1ProfileChangedType,
diff --git a/internal/user/repository/eventsourcing/model/user_machine.go b/internal/user/repository/eventsourcing/model/user_machine.go
index 01decb9399..45d60b4848 100644
--- a/internal/user/repository/eventsourcing/model/user_machine.go
+++ b/internal/user/repository/eventsourcing/model/user_machine.go
@@ -7,7 +7,6 @@ import (
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
user_repo "github.com/zitadel/zitadel/internal/repository/user"
)
@@ -29,7 +28,7 @@ func (sa *Machine) AppendEvents(events ...*es_models.Event) error {
}
func (sa *Machine) AppendEvent(event *es_models.Event) (err error) {
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case user_repo.MachineAddedEventType, user_repo.MachineChangedEventType:
err = sa.setData(event)
}
@@ -66,7 +65,7 @@ func (key *MachineKey) AppendEvents(events ...*es_models.Event) error {
func (key *MachineKey) AppendEvent(event *es_models.Event) (err error) {
key.ObjectRoot.AppendEvent(event)
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case user_repo.MachineKeyAddedEventType:
err = json.Unmarshal(event.Data, key)
if err != nil {
diff --git a/internal/user/repository/eventsourcing/model/web_auth_n.go b/internal/user/repository/eventsourcing/model/web_auth_n.go
index 3bde190309..86bf5de063 100644
--- a/internal/user/repository/eventsourcing/model/web_auth_n.go
+++ b/internal/user/repository/eventsourcing/model/web_auth_n.go
@@ -1,11 +1,10 @@
package model
import (
- "encoding/json"
-
"github.com/zitadel/logging"
caos_errs "github.com/zitadel/zitadel/internal/errors"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/user/model"
)
@@ -62,21 +61,21 @@ func GetWebauthn(webauthnTokens []*WebAuthNToken, id string) (int, *WebAuthNToke
return -1, nil
}
-func (w *WebAuthNVerify) SetData(event *es_models.Event) error {
- if err := json.Unmarshal(event.Data, w); err != nil {
+func (w *WebAuthNVerify) SetData(event eventstore.Event) error {
+ if err := event.Unmarshal(w); err != nil {
logging.Log("EVEN-G342rf").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-B6641", "could not unmarshal event")
}
return nil
}
-func (u *Human) appendU2FAddedEvent(event *es_models.Event) error {
+func (u *Human) appendU2FAddedEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
return err
}
- webauthn.ObjectRoot.CreationDate = event.CreationDate
+ webauthn.ObjectRoot.CreationDate = event.CreatedAt()
webauthn.State = int32(model.MFAStateNotReady)
for i, token := range u.U2FTokens {
if token.State == int32(model.MFAStateNotReady) {
@@ -88,7 +87,7 @@ func (u *Human) appendU2FAddedEvent(event *es_models.Event) error {
return nil
}
-func (u *Human) appendU2FVerifiedEvent(event *es_models.Event) error {
+func (u *Human) appendU2FVerifiedEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
@@ -105,7 +104,7 @@ func (u *Human) appendU2FVerifiedEvent(event *es_models.Event) error {
return caos_errs.ThrowPreconditionFailed(nil, "MODEL-4hu9s", "Errors.Users.MFA.U2F.NotExisting")
}
-func (u *Human) appendU2FChangeSignCountEvent(event *es_models.Event) error {
+func (u *Human) appendU2FChangeSignCountEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
@@ -118,7 +117,7 @@ func (u *Human) appendU2FChangeSignCountEvent(event *es_models.Event) error {
return caos_errs.ThrowPreconditionFailed(nil, "MODEL-5Ms8h", "Errors.Users.MFA.U2F.NotExisting")
}
-func (u *Human) appendU2FRemovedEvent(event *es_models.Event) error {
+func (u *Human) appendU2FRemovedEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
@@ -135,13 +134,13 @@ func (u *Human) appendU2FRemovedEvent(event *es_models.Event) error {
return nil
}
-func (u *Human) appendPasswordlessAddedEvent(event *es_models.Event) error {
+func (u *Human) appendPasswordlessAddedEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
return err
}
- webauthn.ObjectRoot.CreationDate = event.CreationDate
+ webauthn.ObjectRoot.CreationDate = event.CreatedAt()
webauthn.State = int32(model.MFAStateNotReady)
for i, token := range u.PasswordlessTokens {
if token.State == int32(model.MFAStateNotReady) {
@@ -153,7 +152,7 @@ func (u *Human) appendPasswordlessAddedEvent(event *es_models.Event) error {
return nil
}
-func (u *Human) appendPasswordlessVerifiedEvent(event *es_models.Event) error {
+func (u *Human) appendPasswordlessVerifiedEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
@@ -170,7 +169,7 @@ func (u *Human) appendPasswordlessVerifiedEvent(event *es_models.Event) error {
return caos_errs.ThrowPreconditionFailed(nil, "MODEL-mKns8", "Errors.Users.MFA.Passwordless.NotExisting")
}
-func (u *Human) appendPasswordlessChangeSignCountEvent(event *es_models.Event) error {
+func (u *Human) appendPasswordlessChangeSignCountEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
@@ -186,7 +185,7 @@ func (u *Human) appendPasswordlessChangeSignCountEvent(event *es_models.Event) e
return caos_errs.ThrowPreconditionFailed(nil, "MODEL-2Mv9s", "Errors.Users.MFA.Passwordless.NotExisting")
}
-func (u *Human) appendPasswordlessRemovedEvent(event *es_models.Event) error {
+func (u *Human) appendPasswordlessRemovedEvent(event eventstore.Event) error {
webauthn := new(WebAuthNToken)
err := webauthn.setData(event)
if err != nil {
@@ -203,23 +202,23 @@ func (u *Human) appendPasswordlessRemovedEvent(event *es_models.Event) error {
return nil
}
-func (w *WebAuthNToken) setData(event *es_models.Event) error {
+func (w *WebAuthNToken) setData(event eventstore.Event) error {
w.ObjectRoot.AppendEvent(event)
- if err := json.Unmarshal(event.Data, w); err != nil {
+ if err := event.Unmarshal(w); err != nil {
logging.Log("EVEN-4M9is").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-lo023", "could not unmarshal event")
}
return nil
}
-func (u *Human) appendU2FLoginEvent(event *es_models.Event) error {
+func (u *Human) appendU2FLoginEvent(event eventstore.Event) error {
webauthn := new(WebAuthNLogin)
webauthn.ObjectRoot.AppendEvent(event)
err := webauthn.setData(event)
if err != nil {
return err
}
- webauthn.ObjectRoot.CreationDate = event.CreationDate
+ webauthn.ObjectRoot.CreationDate = event.CreatedAt()
for i, token := range u.U2FLogins {
if token.AuthRequest.ID == webauthn.AuthRequest.ID {
u.U2FLogins[i] = webauthn
@@ -230,14 +229,14 @@ func (u *Human) appendU2FLoginEvent(event *es_models.Event) error {
return nil
}
-func (u *Human) appendPasswordlessLoginEvent(event *es_models.Event) error {
+func (u *Human) appendPasswordlessLoginEvent(event eventstore.Event) error {
webauthn := new(WebAuthNLogin)
webauthn.ObjectRoot.AppendEvent(event)
err := webauthn.setData(event)
if err != nil {
return err
}
- webauthn.ObjectRoot.CreationDate = event.CreationDate
+ webauthn.ObjectRoot.CreationDate = event.CreatedAt()
for i, token := range u.PasswordlessLogins {
if token.AuthRequest.ID == webauthn.AuthRequest.ID {
u.PasswordlessLogins[i] = webauthn
@@ -248,9 +247,9 @@ func (u *Human) appendPasswordlessLoginEvent(event *es_models.Event) error {
return nil
}
-func (w *WebAuthNLogin) setData(event *es_models.Event) error {
+func (w *WebAuthNLogin) setData(event eventstore.Event) error {
w.ObjectRoot.AppendEvent(event)
- if err := json.Unmarshal(event.Data, w); err != nil {
+ if err := event.Unmarshal(w); err != nil {
logging.Log("EVEN-hmSlo").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-lo023", "could not unmarshal event")
}
diff --git a/internal/user/repository/view/model/external_idps.go b/internal/user/repository/view/model/external_idps.go
index e8b810d7a9..4b03c7dc49 100644
--- a/internal/user/repository/view/model/external_idps.go
+++ b/internal/user/repository/view/model/external_idps.go
@@ -7,7 +7,6 @@ import (
"github.com/zitadel/logging"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
user_repo "github.com/zitadel/zitadel/internal/repository/user"
)
@@ -35,10 +34,9 @@ type ExternalIDPView struct {
}
func (i *ExternalIDPView) AppendEvent(event *models.Event) (err error) {
- i.Sequence = event.Sequence
+ i.Sequence = event.Seq
i.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
- case user_repo.UserIDPLinkAddedType:
+ if event.Typ == user_repo.UserIDPLinkAddedType {
i.setRootData(event)
i.CreationDate = event.CreationDate
err = i.SetData(event)
diff --git a/internal/user/repository/view/model/notify_user.go b/internal/user/repository/view/model/notify_user.go
index 7390bc504f..371d7a9cdb 100644
--- a/internal/user/repository/view/model/notify_user.go
+++ b/internal/user/repository/view/model/notify_user.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
org_model "github.com/zitadel/zitadel/internal/org/model"
"github.com/zitadel/zitadel/internal/repository/user"
@@ -22,27 +21,27 @@ const (
)
type NotifyUser struct {
- ID string `json:"-" gorm:"column:id;primary_key"`
- CreationDate time.Time `json:"-" gorm:"column:creation_date"`
- ChangeDate time.Time `json:"-" gorm:"column:change_date"`
- ResourceOwner string `json:"-" gorm:"column:resource_owner"`
- UserName string `json:"userName" gorm:"column:user_name"`
- LoginNames database.StringArray `json:"-" gorm:"column:login_names"`
- PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
- FirstName string `json:"firstName" gorm:"column:first_name"`
- LastName string `json:"lastName" gorm:"column:last_name"`
- NickName string `json:"nickName" gorm:"column:nick_name"`
- DisplayName string `json:"displayName" gorm:"column:display_name"`
- PreferredLanguage string `json:"preferredLanguage" gorm:"column:preferred_language"`
- Gender int32 `json:"gender" gorm:"column:gender"`
- LastEmail string `json:"email" gorm:"column:last_email"`
- VerifiedEmail string `json:"-" gorm:"column:verified_email"`
- LastPhone string `json:"phone" gorm:"column:last_phone"`
- VerifiedPhone string `json:"-" gorm:"column:verified_phone"`
- PasswordSet bool `json:"-" gorm:"column:password_set"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- State int32 `json:"-" gorm:"-"`
- InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
+ ID string `json:"-" gorm:"column:id;primary_key"`
+ CreationDate time.Time `json:"-" gorm:"column:creation_date"`
+ ChangeDate time.Time `json:"-" gorm:"column:change_date"`
+ ResourceOwner string `json:"-" gorm:"column:resource_owner"`
+ UserName string `json:"userName" gorm:"column:user_name"`
+ LoginNames database.TextArray[string] `json:"-" gorm:"column:login_names"`
+ PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
+ FirstName string `json:"firstName" gorm:"column:first_name"`
+ LastName string `json:"lastName" gorm:"column:last_name"`
+ NickName string `json:"nickName" gorm:"column:nick_name"`
+ DisplayName string `json:"displayName" gorm:"column:display_name"`
+ PreferredLanguage string `json:"preferredLanguage" gorm:"column:preferred_language"`
+ Gender int32 `json:"gender" gorm:"column:gender"`
+ LastEmail string `json:"email" gorm:"column:last_email"`
+ VerifiedEmail string `json:"-" gorm:"column:verified_email"`
+ LastPhone string `json:"phone" gorm:"column:last_phone"`
+ VerifiedPhone string `json:"-" gorm:"column:verified_phone"`
+ PasswordSet bool `json:"-" gorm:"column:password_set"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ State int32 `json:"-" gorm:"-"`
+ InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
}
func (u *NotifyUser) GenerateLoginName(domain string, appendDomain bool) string {
@@ -67,8 +66,8 @@ func (u *NotifyUser) SetLoginNames(userLoginMustBeDomain bool, domains []*org_mo
func (u *NotifyUser) AppendEvent(event *models.Event) (err error) {
u.ChangeDate = event.CreationDate
- u.Sequence = event.Sequence
- switch eventstore.EventType(event.Type) {
+ u.Sequence = event.Seq
+ switch event.Type() {
case user.UserV1AddedType,
user.UserV1RegisteredType,
user.HumanRegisteredType,
diff --git a/internal/user/repository/view/model/notify_user_test.go b/internal/user/repository/view/model/notify_user_test.go
index e1726c0fa4..7644ba03ab 100644
--- a/internal/user/repository/view/model/notify_user_test.go
+++ b/internal/user/repository/view/model/notify_user_test.go
@@ -21,7 +21,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append added user event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1AddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1AddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
user: &NotifyUser{},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
@@ -29,7 +29,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append added human event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanAddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanAddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
user: &NotifyUser{},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
@@ -37,7 +37,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append change user profile event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1ProfileChangedType), ResourceOwner: "GrantedOrgID", Data: mockProfileData(&es_model.Profile{FirstName: "FirstNameChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1ProfileChangedType, ResourceOwner: "GrantedOrgID", Data: mockProfileData(&es_model.Profile{FirstName: "FirstNameChanged"})},
user: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstNameChanged", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
@@ -45,7 +45,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append change user email event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1EmailChangedType), ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1EmailChangedType, ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
user: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "EmailChanged", LastPhone: "Phone"},
@@ -53,7 +53,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append change user email event, existing email",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1EmailChangedType), ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1EmailChangedType, ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
user: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", VerifiedEmail: "Email", LastPhone: "Phone"},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "EmailChanged", VerifiedEmail: "Email", LastPhone: "Phone"},
@@ -61,7 +61,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append verify user email event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1EmailVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1EmailVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", VerifiedEmail: "Email", LastPhone: "Phone"},
@@ -69,7 +69,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append change user phone event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1PhoneChangedType), ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1PhoneChangedType, ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
user: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "PhoneChanged"},
@@ -77,7 +77,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append change user phone event, existing phone",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1PhoneChangedType), ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1PhoneChangedType, ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
user: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone", VerifiedPhone: "Phone"},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "PhoneChanged", VerifiedPhone: "Phone"},
@@ -85,7 +85,7 @@ func TestNotifyUserAppendEvent(t *testing.T) {
{
name: "append verify user phone event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1PhoneVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1PhoneVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone"},
},
result: &NotifyUser{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", FirstName: "FirstName", LastName: "LastName", LastEmail: "Email", LastPhone: "Phone", VerifiedPhone: "Phone"},
diff --git a/internal/user/repository/view/model/refresh_token.go b/internal/user/repository/view/model/refresh_token.go
index a85aea06a4..d62b3e1410 100644
--- a/internal/user/repository/view/model/refresh_token.go
+++ b/internal/user/repository/view/model/refresh_token.go
@@ -1,7 +1,6 @@
package model
import (
- "encoding/json"
"time"
"github.com/zitadel/logging"
@@ -9,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
user_repo "github.com/zitadel/zitadel/internal/repository/user"
usr_model "github.com/zitadel/zitadel/internal/user/model"
)
@@ -25,22 +23,22 @@ const (
)
type RefreshTokenView struct {
- ID string `json:"tokenId" gorm:"column:id;primary_key"`
- CreationDate time.Time `json:"-" gorm:"column:creation_date"`
- ChangeDate time.Time `json:"-" gorm:"column:change_date"`
- ResourceOwner string `json:"-" gorm:"column:resource_owner"`
- Token string `json:"-" gorm:"column:token"`
- UserID string `json:"-" gorm:"column:user_id"`
- ClientID string `json:"clientID" gorm:"column:client_id"`
- UserAgentID string `json:"userAgentId" gorm:"column:user_agent_id"`
- Audience database.StringArray `json:"audience" gorm:"column:audience"`
- Scopes database.StringArray `json:"scopes" gorm:"column:scopes"`
- AuthMethodsReferences database.StringArray `json:"authMethodsReference" gorm:"column:amr"`
- AuthTime time.Time `json:"authTime" gorm:"column:auth_time"`
- IdleExpiration time.Time `json:"-" gorm:"column:idle_expiration"`
- Expiration time.Time `json:"-" gorm:"column:expiration"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
+ ID string `json:"tokenId" gorm:"column:id;primary_key"`
+ CreationDate time.Time `json:"-" gorm:"column:creation_date"`
+ ChangeDate time.Time `json:"-" gorm:"column:change_date"`
+ ResourceOwner string `json:"-" gorm:"column:resource_owner"`
+ Token string `json:"-" gorm:"column:token"`
+ UserID string `json:"-" gorm:"column:user_id"`
+ ClientID string `json:"clientID" gorm:"column:client_id"`
+ UserAgentID string `json:"userAgentId" gorm:"column:user_agent_id"`
+ Audience database.TextArray[string] `json:"audience" gorm:"column:audience"`
+ Scopes database.TextArray[string] `json:"scopes" gorm:"column:scopes"`
+ AuthMethodsReferences database.TextArray[string] `json:"authMethodsReference" gorm:"column:amr"`
+ AuthTime time.Time `json:"authTime" gorm:"column:auth_time"`
+ IdleExpiration time.Time `json:"-" gorm:"column:idle_expiration"`
+ Expiration time.Time `json:"-" gorm:"column:expiration"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
}
func RefreshTokenViewsToModel(tokens []*RefreshTokenView) []*usr_model.RefreshTokenView {
@@ -71,9 +69,9 @@ func RefreshTokenViewToModel(token *RefreshTokenView) *usr_model.RefreshTokenVie
}
}
-func (t *RefreshTokenView) AppendEventIfMyRefreshToken(event *es_models.Event) (err error) {
+func (t *RefreshTokenView) AppendEventIfMyRefreshToken(event eventstore.Event) (err error) {
view := new(RefreshTokenView)
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case user_repo.HumanRefreshTokenAddedType:
view.setRootData(event)
err = view.appendAddedEvent(event)
@@ -100,10 +98,10 @@ func (t *RefreshTokenView) AppendEventIfMyRefreshToken(event *es_models.Event) (
return nil
}
-func (t *RefreshTokenView) AppendEvent(event *es_models.Event) error {
- t.ChangeDate = event.CreationDate
- t.Sequence = event.Sequence
- switch eventstore.EventType(event.Type) {
+func (t *RefreshTokenView) AppendEvent(event eventstore.Event) error {
+ t.ChangeDate = event.CreatedAt()
+ t.Sequence = event.Sequence()
+ switch event.Type() {
case user_repo.HumanRefreshTokenAddedType:
t.setRootData(event)
return t.appendAddedEvent(event)
@@ -114,55 +112,55 @@ func (t *RefreshTokenView) AppendEvent(event *es_models.Event) error {
return nil
}
-func (t *RefreshTokenView) setRootData(event *es_models.Event) {
- t.UserID = event.AggregateID
- t.ResourceOwner = event.ResourceOwner
- t.InstanceID = event.InstanceID
+func (t *RefreshTokenView) setRootData(event eventstore.Event) {
+ t.UserID = event.Aggregate().ID
+ t.ResourceOwner = event.Aggregate().ResourceOwner
+ t.InstanceID = event.Aggregate().InstanceID
}
-func (t *RefreshTokenView) appendAddedEvent(event *es_models.Event) error {
+func (t *RefreshTokenView) appendAddedEvent(event eventstore.Event) error {
e := new(user_repo.HumanRefreshTokenAddedEvent)
- if err := json.Unmarshal(event.Data, e); err != nil {
+ if err := event.Unmarshal(e); err != nil {
logging.Log("EVEN-Dbb31").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-Bbr42", "could not unmarshal event")
}
t.ID = e.TokenID
- t.CreationDate = event.CreationDate
+ t.CreationDate = event.CreatedAt()
t.AuthMethodsReferences = e.AuthMethodsReferences
t.AuthTime = e.AuthTime
t.Audience = e.Audience
t.ClientID = e.ClientID
- t.Expiration = event.CreationDate.Add(e.Expiration)
- t.IdleExpiration = event.CreationDate.Add(e.IdleExpiration)
+ t.Expiration = event.CreatedAt().Add(e.Expiration)
+ t.IdleExpiration = event.CreatedAt().Add(e.IdleExpiration)
t.Scopes = e.Scopes
t.Token = e.TokenID
t.UserAgentID = e.UserAgentID
return nil
}
-func (t *RefreshTokenView) appendRenewedEvent(event *es_models.Event) error {
+func (t *RefreshTokenView) appendRenewedEvent(event eventstore.Event) error {
e := new(user_repo.HumanRefreshTokenRenewedEvent)
- if err := json.Unmarshal(event.Data, e); err != nil {
+ if err := event.Unmarshal(e); err != nil {
logging.Log("EVEN-Vbbn2").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-Bbrn4", "could not unmarshal event")
}
t.ID = e.TokenID
- t.IdleExpiration = event.CreationDate.Add(e.IdleExpiration)
+ t.IdleExpiration = event.CreatedAt().Add(e.IdleExpiration)
t.Token = e.RefreshToken
return nil
}
-func (t *RefreshTokenView) appendRemovedEvent(event *es_models.Event) {
- t.Expiration = event.CreationDate
+func (t *RefreshTokenView) appendRemovedEvent(event eventstore.Event) {
+ t.Expiration = event.CreatedAt()
}
-func (t *RefreshTokenView) GetRelevantEventTypes() []es_models.EventType {
- return []es_models.EventType{
- es_models.EventType(user_repo.HumanRefreshTokenAddedType),
- es_models.EventType(user_repo.HumanRefreshTokenRenewedType),
- es_models.EventType(user_repo.HumanRefreshTokenRemovedType),
- es_models.EventType(user_repo.UserRemovedType),
- es_models.EventType(user_repo.UserDeactivatedType),
- es_models.EventType(user_repo.UserLockedType),
+func (t *RefreshTokenView) GetRelevantEventTypes() []eventstore.EventType {
+ return []eventstore.EventType{
+ user_repo.HumanRefreshTokenAddedType,
+ user_repo.HumanRefreshTokenRenewedType,
+ user_repo.HumanRefreshTokenRemovedType,
+ user_repo.UserRemovedType,
+ user_repo.UserDeactivatedType,
+ user_repo.UserLockedType,
}
}
diff --git a/internal/user/repository/view/model/token.go b/internal/user/repository/view/model/token.go
index df9d12871e..4e11eec94e 100644
--- a/internal/user/repository/view/model/token.go
+++ b/internal/user/repository/view/model/token.go
@@ -1,7 +1,6 @@
package model
import (
- "encoding/json"
"time"
"github.com/zitadel/logging"
@@ -9,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
user_repo "github.com/zitadel/zitadel/internal/repository/user"
usr_model "github.com/zitadel/zitadel/internal/user/model"
)
@@ -26,22 +24,22 @@ const (
)
type TokenView struct {
- ID string `json:"tokenId" gorm:"column:id;primary_key"`
- CreationDate time.Time `json:"-" gorm:"column:creation_date"`
- ChangeDate time.Time `json:"-" gorm:"column:change_date"`
- ResourceOwner string `json:"-" gorm:"column:resource_owner"`
- UserID string `json:"-" gorm:"column:user_id"`
- ApplicationID string `json:"applicationId" gorm:"column:application_id"`
- UserAgentID string `json:"userAgentId" gorm:"column:user_agent_id"`
- Audience database.StringArray `json:"audience" gorm:"column:audience"`
- Scopes database.StringArray `json:"scopes" gorm:"column:scopes"`
- Expiration time.Time `json:"expiration" gorm:"column:expiration"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- PreferredLanguage string `json:"preferredLanguage" gorm:"column:preferred_language"`
- RefreshTokenID string `json:"refreshTokenID,omitempty" gorm:"refresh_token_id"`
- IsPAT bool `json:"-" gorm:"is_pat"`
- Deactivated bool `json:"-" gorm:"-"`
- InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
+ ID string `json:"tokenId" gorm:"column:id;primary_key"`
+ CreationDate time.Time `json:"-" gorm:"column:creation_date"`
+ ChangeDate time.Time `json:"-" gorm:"column:change_date"`
+ ResourceOwner string `json:"-" gorm:"column:resource_owner"`
+ UserID string `json:"-" gorm:"column:user_id"`
+ ApplicationID string `json:"applicationId" gorm:"column:application_id"`
+ UserAgentID string `json:"userAgentId" gorm:"column:user_agent_id"`
+ Audience database.TextArray[string] `json:"audience" gorm:"column:audience"`
+ Scopes database.TextArray[string] `json:"scopes" gorm:"column:scopes"`
+ Expiration time.Time `json:"expiration" gorm:"column:expiration"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ PreferredLanguage string `json:"preferredLanguage" gorm:"column:preferred_language"`
+ RefreshTokenID string `json:"refreshTokenID,omitempty" gorm:"refresh_token_id"`
+ IsPAT bool `json:"-" gorm:"is_pat"`
+ Deactivated bool `json:"-" gorm:"-"`
+ InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
}
func TokenViewToModel(token *TokenView) *usr_model.TokenView {
@@ -63,9 +61,9 @@ func TokenViewToModel(token *TokenView) *usr_model.TokenView {
}
}
-func (t *TokenView) AppendEventIfMyToken(event *es_models.Event) (err error) {
+func (t *TokenView) AppendEventIfMyToken(event eventstore.Event) (err error) {
view := new(TokenView)
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case user_repo.UserTokenAddedType,
user_repo.PersonalAccessTokenAddedType:
view.setRootData(event)
@@ -91,7 +89,7 @@ func (t *TokenView) AppendEventIfMyToken(event *es_models.Event) (err error) {
return nil
case user_repo.UserUnlockedType,
user_repo.UserReactivatedType:
- if t.ID != "" && event.CreationDate.Before(t.CreationDate) {
+ if t.ID != "" && event.CreatedAt().Before(t.CreationDate) {
t.Deactivated = false
}
return nil
@@ -109,10 +107,10 @@ func (t *TokenView) AppendEventIfMyToken(event *es_models.Event) (err error) {
return nil
}
-func (t *TokenView) AppendEvent(event *es_models.Event) error {
- t.ChangeDate = event.CreationDate
- t.Sequence = event.Sequence
- switch eventstore.EventType(event.Type) {
+func (t *TokenView) AppendEvent(event eventstore.Event) error {
+ t.ChangeDate = event.CreatedAt()
+ t.Sequence = event.Sequence()
+ switch event.Type() {
case user_repo.UserTokenAddedType,
user_repo.PersonalAccessTokenAddedType:
t.setRootData(event)
@@ -120,36 +118,36 @@ func (t *TokenView) AppendEvent(event *es_models.Event) error {
if err != nil {
return err
}
- t.CreationDate = event.CreationDate
- t.IsPAT = eventstore.EventType(event.Type) == user_repo.PersonalAccessTokenAddedType
+ t.CreationDate = event.CreatedAt()
+ t.IsPAT = event.Type() == user_repo.PersonalAccessTokenAddedType
}
return nil
}
-func (t *TokenView) setRootData(event *es_models.Event) {
- t.UserID = event.AggregateID
- t.ResourceOwner = event.ResourceOwner
- t.InstanceID = event.InstanceID
+func (t *TokenView) setRootData(event eventstore.Event) {
+ t.UserID = event.Aggregate().ID
+ t.ResourceOwner = event.Aggregate().ResourceOwner
+ t.InstanceID = event.Aggregate().InstanceID
}
-func (t *TokenView) setData(event *es_models.Event) error {
- if err := json.Unmarshal(event.Data, t); err != nil {
+func (t *TokenView) setData(event eventstore.Event) error {
+ if err := event.Unmarshal(t); err != nil {
logging.Log("EVEN-3Gm9s").WithError(err).Error("could not unmarshal event data")
return caos_errs.ThrowInternal(err, "MODEL-5Gms9", "could not unmarshal event")
}
return nil
}
-func agentIDFromSession(event *es_models.Event) (string, error) {
+func agentIDFromSession(event eventstore.Event) (string, error) {
session := make(map[string]interface{})
- if err := json.Unmarshal(event.Data, &session); err != nil {
+ if err := event.Unmarshal(&session); err != nil {
logging.Log("EVEN-Ghgt3").WithError(err).Error("could not unmarshal event data")
return "", caos_errs.ThrowInternal(nil, "MODEL-GBf32", "could not unmarshal data")
}
return session["userAgentID"].(string), nil
}
-func (t *TokenView) appendTokenRemoved(event *es_models.Event) error {
+func (t *TokenView) appendTokenRemoved(event eventstore.Event) error {
token, err := eventToMap(event)
if err != nil {
return err
@@ -160,7 +158,7 @@ func (t *TokenView) appendTokenRemoved(event *es_models.Event) error {
return nil
}
-func (t *TokenView) appendRefreshTokenRemoved(event *es_models.Event) error {
+func (t *TokenView) appendRefreshTokenRemoved(event eventstore.Event) error {
refreshToken, err := eventToMap(event)
if err != nil {
return err
@@ -171,7 +169,7 @@ func (t *TokenView) appendRefreshTokenRemoved(event *es_models.Event) error {
return nil
}
-func (t *TokenView) appendPATRemoved(event *es_models.Event) error {
+func (t *TokenView) appendPATRemoved(event eventstore.Event) error {
pat, err := eventToMap(event)
if err != nil {
return err
@@ -182,26 +180,26 @@ func (t *TokenView) appendPATRemoved(event *es_models.Event) error {
return nil
}
-func (t *TokenView) GetRelevantEventTypes() []es_models.EventType {
- return []es_models.EventType{
- es_models.EventType(user_repo.UserTokenAddedType),
- es_models.EventType(user_repo.PersonalAccessTokenAddedType),
- es_models.EventType(user_repo.UserTokenRemovedType),
- es_models.EventType(user_repo.HumanRefreshTokenRemovedType),
- es_models.EventType(user_repo.UserV1SignedOutType),
- es_models.EventType(user_repo.HumanSignedOutType),
- es_models.EventType(user_repo.UserRemovedType),
- es_models.EventType(user_repo.UserDeactivatedType),
- es_models.EventType(user_repo.UserLockedType),
- es_models.EventType(user_repo.UserLockedType),
- es_models.EventType(user_repo.UserReactivatedType),
- es_models.EventType(user_repo.PersonalAccessTokenRemovedType),
+func (t *TokenView) GetRelevantEventTypes() []eventstore.EventType {
+ return []eventstore.EventType{
+ user_repo.UserTokenAddedType,
+ user_repo.PersonalAccessTokenAddedType,
+ user_repo.UserTokenRemovedType,
+ user_repo.HumanRefreshTokenRemovedType,
+ user_repo.UserV1SignedOutType,
+ user_repo.HumanSignedOutType,
+ user_repo.UserRemovedType,
+ user_repo.UserDeactivatedType,
+ user_repo.UserLockedType,
+ user_repo.UserLockedType,
+ user_repo.UserReactivatedType,
+ user_repo.PersonalAccessTokenRemovedType,
}
}
-func eventToMap(event *es_models.Event) (map[string]interface{}, error) {
+func eventToMap(event eventstore.Event) (map[string]interface{}, error) {
m := make(map[string]interface{})
- if err := json.Unmarshal(event.Data, &m); err != nil {
+ if err := event.Unmarshal(&m); err != nil {
logging.Log("EVEN-Dbffe").WithError(err).Error("could not unmarshal event data")
return nil, caos_errs.ThrowInternal(nil, "MODEL-SDAfw", "could not unmarshal data")
}
diff --git a/internal/user/repository/view/model/user.go b/internal/user/repository/view/model/user.go
index db9f50371d..65fd329933 100644
--- a/internal/user/repository/view/model/user.go
+++ b/internal/user/repository/view/model/user.go
@@ -11,7 +11,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
org_model "github.com/zitadel/zitadel/internal/org/model"
"github.com/zitadel/zitadel/internal/repository/user"
"github.com/zitadel/zitadel/internal/user/model"
@@ -43,18 +42,18 @@ const (
)
type UserView struct {
- ID string `json:"-" gorm:"column:id;primary_key"`
- CreationDate time.Time `json:"-" gorm:"column:creation_date"`
- ChangeDate time.Time `json:"-" gorm:"column:change_date"`
- ResourceOwner string `json:"-" gorm:"column:resource_owner"`
- State int32 `json:"-" gorm:"column:user_state"`
- LastLogin time.Time `json:"-" gorm:"column:last_login"`
- LoginNames database.StringArray `json:"-" gorm:"column:login_names"`
- PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- Type userType `json:"-" gorm:"column:user_type"`
- UserName string `json:"userName" gorm:"column:user_name"`
- InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
+ ID string `json:"-" gorm:"column:id;primary_key"`
+ CreationDate time.Time `json:"-" gorm:"column:creation_date"`
+ ChangeDate time.Time `json:"-" gorm:"column:change_date"`
+ ResourceOwner string `json:"-" gorm:"column:resource_owner"`
+ State int32 `json:"-" gorm:"column:user_state"`
+ LastLogin time.Time `json:"-" gorm:"column:last_login"`
+ LoginNames database.TextArray[string] `json:"-" gorm:"column:login_names"`
+ PreferredLoginName string `json:"-" gorm:"column:preferred_login_name"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ Type userType `json:"-" gorm:"column:user_type"`
+ UserName string `json:"userName" gorm:"column:user_name"`
+ InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
*MachineView
*HumanView
}
@@ -236,12 +235,12 @@ func (u *UserView) SetLoginNames(userLoginMustBeDomain bool, domains []*org_mode
}
}
-func (u *UserView) AppendEvent(event *models.Event) (err error) {
- u.ChangeDate = event.CreationDate
- u.Sequence = event.Sequence
- switch eventstore.EventType(event.Type) {
+func (u *UserView) AppendEvent(event eventstore.Event) (err error) {
+ u.ChangeDate = event.CreatedAt()
+ u.Sequence = event.Sequence()
+ switch event.Type() {
case user.MachineAddedEventType:
- u.CreationDate = event.CreationDate
+ u.CreationDate = event.CreatedAt()
u.setRootData(event)
u.Type = userTypeMachine
err = u.setData(event)
@@ -252,7 +251,7 @@ func (u *UserView) AppendEvent(event *models.Event) (err error) {
user.UserV1RegisteredType,
user.HumanRegisteredType,
user.HumanAddedType:
- u.CreationDate = event.CreationDate
+ u.CreationDate = event.CreatedAt()
u.setRootData(event)
u.Type = userTypeHuman
err = u.setData(event)
@@ -317,14 +316,14 @@ func (u *UserView) AppendEvent(event *models.Event) (err error) {
case user.UserV1MFAOTPAddedType,
user.HumanMFAOTPAddedType:
if u.HumanView == nil {
- logging.WithFields("sequence", event.Sequence, "instance", event.InstanceID).Warn("event is ignored because human not exists")
+ logging.WithFields("event_sequence", event.Sequence, "aggregate_id", event.Aggregate().ID, "instance", event.Aggregate().InstanceID).Warn("event is ignored because human not exists")
return errors.ThrowInvalidArgument(nil, "MODEL-p2BXx", "event ignored: human not exists")
}
u.OTPState = int32(model.MFAStateNotReady)
case user.UserV1MFAOTPVerifiedType,
user.HumanMFAOTPVerifiedType:
if u.HumanView == nil {
- logging.WithFields("sequence", event.Sequence, "instance", event.InstanceID).Warn("event is ignored because human not exists")
+ logging.WithFields("event_sequence", event.Sequence, "aggregate_id", event.Aggregate().ID, "instance", event.Aggregate().InstanceID).Warn("event is ignored because human not exists")
return errors.ThrowInvalidArgument(nil, "MODEL-o6Lcq", "event ignored: human not exists")
}
u.OTPState = int32(model.MFAStateReady)
@@ -354,7 +353,7 @@ func (u *UserView) AppendEvent(event *models.Event) (err error) {
err = u.removeU2FToken(event)
case user.UserV1MFAInitSkippedType,
user.HumanMFAInitSkippedType:
- u.MFAInitSkipped = event.CreationDate
+ u.MFAInitSkipped = event.CreatedAt()
case user.UserV1InitialCodeAddedType,
user.HumanInitialCodeAddedType:
u.InitRequired = true
@@ -367,6 +366,10 @@ func (u *UserView) AppendEvent(event *models.Event) (err error) {
u.AvatarKey = ""
case user.HumanPasswordlessInitCodeAddedType,
user.HumanPasswordlessInitCodeRequestedType:
+ if u.HumanView == nil {
+ logging.WithFields("event_sequence", event.Sequence, "aggregate_id", event.Aggregate().ID, "instance", event.Aggregate().InstanceID).Warn("event is ignored because human not exists")
+ return errors.ThrowInvalidArgument(nil, "MODEL-MbyC0", "event ignored: human not exists")
+ }
if !u.PasswordSet {
u.PasswordlessInitRequired = true
u.PasswordInitRequired = false
@@ -376,34 +379,34 @@ func (u *UserView) AppendEvent(event *models.Event) (err error) {
return err
}
-func (u *UserView) setRootData(event *models.Event) {
- u.ID = event.AggregateID
- u.ResourceOwner = event.ResourceOwner
- u.InstanceID = event.InstanceID
+func (u *UserView) setRootData(event eventstore.Event) {
+ u.ID = event.Aggregate().ID
+ u.ResourceOwner = event.Aggregate().ResourceOwner
+ u.InstanceID = event.Aggregate().InstanceID
}
-func (u *UserView) setData(event *models.Event) error {
- if err := json.Unmarshal(event.Data, u); err != nil {
+func (u *UserView) setData(event eventstore.Event) error {
+ if err := event.Unmarshal(u); err != nil {
logging.Log("MODEL-lso9e").WithError(err).Error("could not unmarshal event data")
return errors.ThrowInternal(nil, "MODEL-8iows", "could not unmarshal data")
}
return nil
}
-func (u *UserView) setPasswordData(event *models.Event) error {
+func (u *UserView) setPasswordData(event eventstore.Event) error {
password := new(es_model.Password)
- if err := json.Unmarshal(event.Data, password); err != nil {
+ if err := event.Unmarshal(password); err != nil {
logging.Log("MODEL-sdw4r").WithError(err).Error("could not unmarshal event data")
return errors.ThrowInternal(nil, "MODEL-6jhsw", "could not unmarshal data")
}
u.PasswordSet = password.Secret != nil || password.EncodedHash != ""
u.PasswordInitRequired = !u.PasswordSet
u.PasswordChangeRequired = password.ChangeRequired
- u.PasswordChanged = event.CreationDate
+ u.PasswordChanged = event.CreatedAt()
return nil
}
-func (u *UserView) addPasswordlessToken(event *models.Event) error {
+func (u *UserView) addPasswordlessToken(event eventstore.Event) error {
token, err := webAuthNViewFromEvent(event)
if err != nil {
return err
@@ -419,7 +422,7 @@ func (u *UserView) addPasswordlessToken(event *models.Event) error {
return nil
}
-func (u *UserView) updatePasswordlessToken(event *models.Event) error {
+func (u *UserView) updatePasswordlessToken(event eventstore.Event) error {
token, err := webAuthNViewFromEvent(event)
if err != nil {
return err
@@ -434,7 +437,7 @@ func (u *UserView) updatePasswordlessToken(event *models.Event) error {
return nil
}
-func (u *UserView) removePasswordlessToken(event *models.Event) error {
+func (u *UserView) removePasswordlessToken(event eventstore.Event) error {
token, err := webAuthNViewFromEvent(event)
if err != nil {
return err
@@ -450,7 +453,7 @@ func (u *UserView) removePasswordlessToken(event *models.Event) error {
return nil
}
-func (u *UserView) addU2FToken(event *models.Event) error {
+func (u *UserView) addU2FToken(event eventstore.Event) error {
token, err := webAuthNViewFromEvent(event)
if err != nil {
return err
@@ -466,7 +469,7 @@ func (u *UserView) addU2FToken(event *models.Event) error {
return nil
}
-func (u *UserView) updateU2FToken(event *models.Event) error {
+func (u *UserView) updateU2FToken(event eventstore.Event) error {
token, err := webAuthNViewFromEvent(event)
if err != nil {
return err
@@ -481,7 +484,7 @@ func (u *UserView) updateU2FToken(event *models.Event) error {
return nil
}
-func (u *UserView) removeU2FToken(event *models.Event) error {
+func (u *UserView) removeU2FToken(event eventstore.Event) error {
token, err := webAuthNViewFromEvent(event)
if err != nil {
return err
@@ -496,9 +499,9 @@ func (u *UserView) removeU2FToken(event *models.Event) error {
return nil
}
-func webAuthNViewFromEvent(event *models.Event) (*WebAuthNView, error) {
+func webAuthNViewFromEvent(event eventstore.Event) (*WebAuthNView, error) {
token := new(WebAuthNView)
- err := json.Unmarshal(event.Data, token)
+ err := event.Unmarshal(token)
if err != nil {
return nil, errors.ThrowInternal(err, "MODEL-FSaq1", "could not unmarshal data")
}
@@ -552,62 +555,62 @@ func (u *UserView) SetEmptyUserType() {
}
}
-func (u *UserView) EventTypes() []models.EventType {
- return []models.EventType{
- models.EventType(user.MachineAddedEventType),
- models.EventType(user.UserV1AddedType),
- models.EventType(user.UserV1RegisteredType),
- models.EventType(user.HumanRegisteredType),
- models.EventType(user.HumanAddedType),
- models.EventType(user.UserRemovedType),
- models.EventType(user.UserV1PasswordChangedType),
- models.EventType(user.HumanPasswordChangedType),
- models.EventType(user.HumanPasswordlessTokenAddedType),
- models.EventType(user.HumanPasswordlessTokenVerifiedType),
- models.EventType(user.HumanPasswordlessTokenRemovedType),
- models.EventType(user.UserV1ProfileChangedType),
- models.EventType(user.HumanProfileChangedType),
- models.EventType(user.UserV1AddressChangedType),
- models.EventType(user.HumanAddressChangedType),
- models.EventType(user.MachineChangedEventType),
- models.EventType(user.UserDomainClaimedType),
- models.EventType(user.UserUserNameChangedType),
- models.EventType(user.UserV1EmailChangedType),
- models.EventType(user.HumanEmailChangedType),
- models.EventType(user.UserV1EmailVerifiedType),
- models.EventType(user.HumanEmailVerifiedType),
- models.EventType(user.UserV1PhoneChangedType),
- models.EventType(user.HumanPhoneChangedType),
- models.EventType(user.UserV1PhoneVerifiedType),
- models.EventType(user.HumanPhoneVerifiedType),
- models.EventType(user.UserV1PhoneRemovedType),
- models.EventType(user.HumanPhoneRemovedType),
- models.EventType(user.UserDeactivatedType),
- models.EventType(user.UserReactivatedType),
- models.EventType(user.UserUnlockedType),
- models.EventType(user.UserLockedType),
- models.EventType(user.UserV1MFAOTPAddedType),
- models.EventType(user.HumanMFAOTPAddedType),
- models.EventType(user.UserV1MFAOTPVerifiedType),
- models.EventType(user.HumanMFAOTPVerifiedType),
- models.EventType(user.UserV1MFAOTPRemovedType),
- models.EventType(user.HumanMFAOTPRemovedType),
- models.EventType(user.HumanOTPSMSAddedType),
- models.EventType(user.HumanOTPSMSRemovedType),
- models.EventType(user.HumanOTPEmailAddedType),
- models.EventType(user.HumanOTPEmailRemovedType),
- models.EventType(user.HumanU2FTokenAddedType),
- models.EventType(user.HumanU2FTokenVerifiedType),
- models.EventType(user.HumanU2FTokenRemovedType),
- models.EventType(user.UserV1MFAInitSkippedType),
- models.EventType(user.HumanMFAInitSkippedType),
- models.EventType(user.UserV1InitialCodeAddedType),
- models.EventType(user.HumanInitialCodeAddedType),
- models.EventType(user.UserV1InitializedCheckSucceededType),
- models.EventType(user.HumanInitializedCheckSucceededType),
- models.EventType(user.HumanAvatarAddedType),
- models.EventType(user.HumanAvatarRemovedType),
- models.EventType(user.HumanPasswordlessInitCodeAddedType),
- models.EventType(user.HumanPasswordlessInitCodeRequestedType),
+func (u *UserView) EventTypes() []eventstore.EventType {
+ return []eventstore.EventType{
+ user.MachineAddedEventType,
+ user.UserV1AddedType,
+ user.UserV1RegisteredType,
+ user.HumanRegisteredType,
+ user.HumanAddedType,
+ user.UserRemovedType,
+ user.UserV1PasswordChangedType,
+ user.HumanPasswordChangedType,
+ user.HumanPasswordlessTokenAddedType,
+ user.HumanPasswordlessTokenVerifiedType,
+ user.HumanPasswordlessTokenRemovedType,
+ user.UserV1ProfileChangedType,
+ user.HumanProfileChangedType,
+ user.UserV1AddressChangedType,
+ user.HumanAddressChangedType,
+ user.MachineChangedEventType,
+ user.UserDomainClaimedType,
+ user.UserUserNameChangedType,
+ user.UserV1EmailChangedType,
+ user.HumanEmailChangedType,
+ user.UserV1EmailVerifiedType,
+ user.HumanEmailVerifiedType,
+ user.UserV1PhoneChangedType,
+ user.HumanPhoneChangedType,
+ user.UserV1PhoneVerifiedType,
+ user.HumanPhoneVerifiedType,
+ user.UserV1PhoneRemovedType,
+ user.HumanPhoneRemovedType,
+ user.UserDeactivatedType,
+ user.UserReactivatedType,
+ user.UserUnlockedType,
+ user.UserLockedType,
+ user.UserV1MFAOTPAddedType,
+ user.HumanMFAOTPAddedType,
+ user.UserV1MFAOTPVerifiedType,
+ user.HumanMFAOTPVerifiedType,
+ user.UserV1MFAOTPRemovedType,
+ user.HumanMFAOTPRemovedType,
+ user.HumanOTPSMSAddedType,
+ user.HumanOTPSMSRemovedType,
+ user.HumanOTPEmailAddedType,
+ user.HumanOTPEmailRemovedType,
+ user.HumanU2FTokenAddedType,
+ user.HumanU2FTokenVerifiedType,
+ user.HumanU2FTokenRemovedType,
+ user.UserV1MFAInitSkippedType,
+ user.HumanMFAInitSkippedType,
+ user.UserV1InitialCodeAddedType,
+ user.HumanInitialCodeAddedType,
+ user.UserV1InitializedCheckSucceededType,
+ user.HumanInitializedCheckSucceededType,
+ user.HumanAvatarAddedType,
+ user.HumanAvatarRemovedType,
+ user.HumanPasswordlessInitCodeAddedType,
+ user.HumanPasswordlessInitCodeRequestedType,
}
}
diff --git a/internal/user/repository/view/model/user_membership.go b/internal/user/repository/view/model/user_membership.go
index c8872d6838..7562c1e846 100644
--- a/internal/user/repository/view/model/user_membership.go
+++ b/internal/user/repository/view/model/user_membership.go
@@ -8,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/database"
caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/v1/models"
iam_es_model "github.com/zitadel/zitadel/internal/iam/repository/eventsourcing/model"
org_es_model "github.com/zitadel/zitadel/internal/org/repository/eventsourcing/model"
@@ -34,21 +33,21 @@ type UserMembershipView struct {
AggregateID string `json:"-" gorm:"column:aggregate_id;primary_key"`
ObjectID string `json:"-" gorm:"column:object_id;primary_key"`
- Roles database.StringArray `json:"-" gorm:"column:roles"`
- DisplayName string `json:"-" gorm:"column:display_name"`
- CreationDate time.Time `json:"-" gorm:"column:creation_date"`
- ChangeDate time.Time `json:"-" gorm:"column:change_date"`
- ResourceOwner string `json:"-" gorm:"column:resource_owner"`
- ResourceOwnerName string `json:"-" gorm:"column:resource_owner_name"`
- Sequence uint64 `json:"-" gorm:"column:sequence"`
- InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
+ Roles database.TextArray[string] `json:"-" gorm:"column:roles"`
+ DisplayName string `json:"-" gorm:"column:display_name"`
+ CreationDate time.Time `json:"-" gorm:"column:creation_date"`
+ ChangeDate time.Time `json:"-" gorm:"column:change_date"`
+ ResourceOwner string `json:"-" gorm:"column:resource_owner"`
+ ResourceOwnerName string `json:"-" gorm:"column:resource_owner_name"`
+ Sequence uint64 `json:"-" gorm:"column:sequence"`
+ InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
}
func (u *UserMembershipView) AppendEvent(event *models.Event) (err error) {
u.ChangeDate = event.CreationDate
- u.Sequence = event.Sequence
+ u.Sequence = event.Seq
- switch eventstore.EventType(event.Type) {
+ switch event.Type() {
case instance.MemberAddedEventType:
u.setRootData(event, model.MemberTypeIam)
err = u.setIamMemberData(event)
diff --git a/internal/user/repository/view/model/user_session.go b/internal/user/repository/view/model/user_session.go
index 63eb5e0a76..d660b38a25 100644
--- a/internal/user/repository/view/model/user_session.go
+++ b/internal/user/repository/view/model/user_session.go
@@ -1,7 +1,6 @@
package model
import (
- "encoding/json"
"time"
"github.com/zitadel/logging"
@@ -9,7 +8,6 @@ import (
"github.com/zitadel/zitadel/internal/domain"
caos_errs "github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
- "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
"github.com/zitadel/zitadel/internal/user/model"
es_model "github.com/zitadel/zitadel/internal/user/repository/eventsourcing/model"
@@ -47,9 +45,9 @@ type UserSessionView struct {
InstanceID string `json:"instanceID" gorm:"column:instance_id;primary_key"`
}
-func UserSessionFromEvent(event *models.Event) (*UserSessionView, error) {
+func UserSessionFromEvent(event eventstore.Event) (*UserSessionView, error) {
v := new(UserSessionView)
- if err := json.Unmarshal(event.Data, v); err != nil {
+ if err := event.Unmarshal(v); err != nil {
logging.Log("EVEN-lso9e").WithError(err).Error("could not unmarshal event data")
return nil, caos_errs.ThrowInternal(nil, "MODEL-sd325", "could not unmarshal data")
}
@@ -88,13 +86,13 @@ func UserSessionsToModel(userSessions []*UserSessionView) []*model.UserSessionVi
return result
}
-func (v *UserSessionView) AppendEvent(event *models.Event) error {
- v.Sequence = event.Sequence
- v.ChangeDate = event.CreationDate
- switch eventstore.EventType(event.Type) {
+func (v *UserSessionView) AppendEvent(event eventstore.Event) error {
+ v.Sequence = event.Sequence()
+ v.ChangeDate = event.CreatedAt()
+ switch event.Type() {
case user.UserV1PasswordCheckSucceededType,
user.HumanPasswordCheckSucceededType:
- v.PasswordVerification = event.CreationDate
+ v.PasswordVerification = event.CreatedAt()
v.State = int32(domain.UserSessionStateActive)
case user.UserIDPLoginCheckSucceededType:
data := new(es_model.AuthRequest)
@@ -102,12 +100,12 @@ func (v *UserSessionView) AppendEvent(event *models.Event) error {
if err != nil {
return err
}
- v.ExternalLoginVerification = event.CreationDate
+ v.ExternalLoginVerification = event.CreatedAt()
v.SelectedIDPConfigID = data.SelectedIDPConfigID
v.State = int32(domain.UserSessionStateActive)
case user.HumanPasswordlessTokenCheckSucceededType:
- v.PasswordlessVerification = event.CreationDate
- v.MultiFactorVerification = event.CreationDate
+ v.PasswordlessVerification = event.CreatedAt()
+ v.MultiFactorVerification = event.CreatedAt()
v.MultiFactorVerificationType = int32(domain.MFATypeU2FUserVerification)
v.State = int32(domain.UserSessionStateActive)
case user.HumanPasswordlessTokenCheckFailedType,
@@ -134,11 +132,11 @@ func (v *UserSessionView) AppendEvent(event *models.Event) error {
return err
}
if v.UserAgentID == data.UserAgentID {
- v.setSecondFactorVerification(event.CreationDate, domain.MFATypeTOTP)
+ v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeTOTP)
}
case user.UserV1MFAOTPCheckSucceededType,
user.HumanMFAOTPCheckSucceededType:
- v.setSecondFactorVerification(event.CreationDate, domain.MFATypeTOTP)
+ v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeTOTP)
case user.HumanOTPSMSCheckSucceededType:
data := new(es_model.OTPVerified)
err := data.SetData(event)
@@ -146,7 +144,7 @@ func (v *UserSessionView) AppendEvent(event *models.Event) error {
return err
}
if v.UserAgentID == data.UserAgentID {
- v.setSecondFactorVerification(event.CreationDate, domain.MFATypeOTPSMS)
+ v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeOTPSMS)
}
case user.HumanOTPEmailCheckSucceededType:
data := new(es_model.OTPVerified)
@@ -155,7 +153,7 @@ func (v *UserSessionView) AppendEvent(event *models.Event) error {
return err
}
if v.UserAgentID == data.UserAgentID {
- v.setSecondFactorVerification(event.CreationDate, domain.MFATypeOTPEmail)
+ v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeOTPEmail)
}
case user.UserV1MFAOTPCheckFailedType,
user.UserV1MFAOTPRemovedType,
@@ -173,10 +171,10 @@ func (v *UserSessionView) AppendEvent(event *models.Event) error {
return err
}
if v.UserAgentID == data.UserAgentID {
- v.setSecondFactorVerification(event.CreationDate, domain.MFATypeU2F)
+ v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeU2F)
}
case user.HumanU2FTokenCheckSucceededType:
- v.setSecondFactorVerification(event.CreationDate, domain.MFATypeU2F)
+ v.setSecondFactorVerification(event.CreatedAt(), domain.MFATypeU2F)
case user.UserV1SignedOutType,
user.HumanSignedOutType,
user.UserLockedType,
@@ -210,49 +208,49 @@ func (v *UserSessionView) setSecondFactorVerification(verificationTime time.Time
v.State = int32(domain.UserSessionStateActive)
}
-func avatarKeyFromEvent(event *models.Event) (string, error) {
+func avatarKeyFromEvent(event eventstore.Event) (string, error) {
data := make(map[string]string)
- if err := json.Unmarshal(event.Data, &data); err != nil {
+ if err := event.Unmarshal(&data); err != nil {
logging.Log("EVEN-Sfew2").WithError(err).Error("could not unmarshal event data")
return "", caos_errs.ThrowInternal(err, "MODEL-SFw2q", "could not unmarshal event")
}
return data["storeKey"], nil
}
-func (v *UserSessionView) EventTypes() []models.EventType {
- return []models.EventType{
- models.EventType(user.UserV1PasswordCheckSucceededType),
- models.EventType(user.HumanPasswordCheckSucceededType),
- models.EventType(user.UserIDPLoginCheckSucceededType),
- models.EventType(user.HumanPasswordlessTokenCheckSucceededType),
- models.EventType(user.HumanPasswordlessTokenCheckFailedType),
- models.EventType(user.HumanPasswordlessTokenRemovedType),
- models.EventType(user.UserV1PasswordCheckFailedType),
- models.EventType(user.HumanPasswordCheckFailedType),
- models.EventType(user.UserV1PasswordChangedType),
- models.EventType(user.HumanPasswordChangedType),
- models.EventType(user.HumanMFAOTPVerifiedType),
- models.EventType(user.UserV1MFAOTPCheckSucceededType),
- models.EventType(user.HumanMFAOTPCheckSucceededType),
- models.EventType(user.UserV1MFAOTPCheckFailedType),
- models.EventType(user.UserV1MFAOTPRemovedType),
- models.EventType(user.HumanMFAOTPCheckFailedType),
- models.EventType(user.HumanMFAOTPRemovedType),
- models.EventType(user.HumanOTPSMSCheckSucceededType),
- models.EventType(user.HumanOTPSMSCheckFailedType),
- models.EventType(user.HumanOTPEmailCheckSucceededType),
- models.EventType(user.HumanOTPEmailCheckFailedType),
- models.EventType(user.HumanU2FTokenCheckFailedType),
- models.EventType(user.HumanU2FTokenRemovedType),
- models.EventType(user.HumanU2FTokenVerifiedType),
- models.EventType(user.HumanU2FTokenCheckSucceededType),
- models.EventType(user.UserV1SignedOutType),
- models.EventType(user.HumanSignedOutType),
- models.EventType(user.UserLockedType),
- models.EventType(user.UserDeactivatedType),
- models.EventType(user.UserIDPLinkRemovedType),
- models.EventType(user.UserIDPLinkCascadeRemovedType),
- models.EventType(user.HumanAvatarAddedType),
- models.EventType(user.HumanAvatarRemovedType),
+func (v *UserSessionView) EventTypes() []eventstore.EventType {
+ return []eventstore.EventType{
+ user.UserV1PasswordCheckSucceededType,
+ user.HumanPasswordCheckSucceededType,
+ user.UserIDPLoginCheckSucceededType,
+ user.HumanPasswordlessTokenCheckSucceededType,
+ user.HumanPasswordlessTokenCheckFailedType,
+ user.HumanPasswordlessTokenRemovedType,
+ user.UserV1PasswordCheckFailedType,
+ user.HumanPasswordCheckFailedType,
+ user.UserV1PasswordChangedType,
+ user.HumanPasswordChangedType,
+ user.HumanMFAOTPVerifiedType,
+ user.UserV1MFAOTPCheckSucceededType,
+ user.HumanMFAOTPCheckSucceededType,
+ user.UserV1MFAOTPCheckFailedType,
+ user.UserV1MFAOTPRemovedType,
+ user.HumanMFAOTPCheckFailedType,
+ user.HumanMFAOTPRemovedType,
+ user.HumanOTPSMSCheckSucceededType,
+ user.HumanOTPSMSCheckFailedType,
+ user.HumanOTPEmailCheckSucceededType,
+ user.HumanOTPEmailCheckFailedType,
+ user.HumanU2FTokenCheckFailedType,
+ user.HumanU2FTokenRemovedType,
+ user.HumanU2FTokenVerifiedType,
+ user.HumanU2FTokenCheckSucceededType,
+ user.UserV1SignedOutType,
+ user.HumanSignedOutType,
+ user.UserLockedType,
+ user.UserDeactivatedType,
+ user.UserIDPLinkRemovedType,
+ user.UserIDPLinkCascadeRemovedType,
+ user.HumanAvatarAddedType,
+ user.HumanAvatarRemovedType,
}
}
diff --git a/internal/user/repository/view/model/user_session_test.go b/internal/user/repository/view/model/user_session_test.go
index 3ba7ab5e6a..8f3157f989 100644
--- a/internal/user/repository/view/model/user_session_test.go
+++ b/internal/user/repository/view/model/user_session_test.go
@@ -30,7 +30,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append user password check succeeded event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.UserV1PasswordCheckSucceededType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.UserV1PasswordCheckSucceededType},
userView: &UserSessionView{},
},
result: &UserSessionView{ChangeDate: now(), PasswordVerification: now()},
@@ -38,7 +38,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append human password check succeeded event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.HumanPasswordCheckSucceededType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.HumanPasswordCheckSucceededType},
userView: &UserSessionView{},
},
result: &UserSessionView{ChangeDate: now(), PasswordVerification: now()},
@@ -46,7 +46,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append user password check failed event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.UserV1PasswordCheckFailedType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.UserV1PasswordCheckFailedType},
userView: &UserSessionView{PasswordVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), PasswordVerification: time.Time{}},
@@ -54,7 +54,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append human password check failed event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.HumanPasswordCheckFailedType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.HumanPasswordCheckFailedType},
userView: &UserSessionView{PasswordVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), PasswordVerification: time.Time{}},
@@ -64,7 +64,7 @@ func TestAppendEvent(t *testing.T) {
args: args{
event: &es_models.Event{
CreationDate: now(),
- Type: es_models.EventType(user.UserV1PasswordChangedType),
+ Typ: user.UserV1PasswordChangedType,
Data: func() []byte {
d, _ := json.Marshal(&es_model.Password{
Secret: &crypto.CryptoValue{Crypted: []byte("test")},
@@ -81,7 +81,7 @@ func TestAppendEvent(t *testing.T) {
args: args{
event: &es_models.Event{
CreationDate: now(),
- Type: es_models.EventType(user.HumanPasswordChangedType),
+ Typ: user.HumanPasswordChangedType,
Data: func() []byte {
d, _ := json.Marshal(&es_model.PasswordChange{
Password: es_model.Password{
@@ -100,7 +100,7 @@ func TestAppendEvent(t *testing.T) {
args: args{
event: &es_models.Event{
CreationDate: now(),
- Type: es_models.EventType(user.HumanPasswordChangedType),
+ Typ: user.HumanPasswordChangedType,
Data: func() []byte {
d, _ := json.Marshal(&es_model.PasswordChange{
Password: es_model.Password{
@@ -120,7 +120,7 @@ func TestAppendEvent(t *testing.T) {
args: args{
event: &es_models.Event{
CreationDate: now(),
- Type: es_models.EventType(user.HumanMFAOTPVerifiedType),
+ Typ: user.HumanMFAOTPVerifiedType,
Data: nil,
},
userView: &UserSessionView{UserAgentID: "id"},
@@ -132,7 +132,7 @@ func TestAppendEvent(t *testing.T) {
args: args{
event: &es_models.Event{
CreationDate: now(),
- Type: es_models.EventType(user.HumanMFAOTPVerifiedType),
+ Typ: user.HumanMFAOTPVerifiedType,
Data: func() []byte {
d, _ := json.Marshal(&es_model.OTPVerified{
UserAgentID: "id",
@@ -147,7 +147,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append user otp check succeeded event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.UserV1MFAOTPCheckSucceededType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.UserV1MFAOTPCheckSucceededType},
userView: &UserSessionView{},
},
result: &UserSessionView{ChangeDate: now(), SecondFactorVerification: now()},
@@ -155,7 +155,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append human otp check succeeded event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.HumanMFAOTPCheckSucceededType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.HumanMFAOTPCheckSucceededType},
userView: &UserSessionView{},
},
result: &UserSessionView{ChangeDate: now(), SecondFactorVerification: now()},
@@ -163,7 +163,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append user otp check failed event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.UserV1MFAOTPCheckFailedType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.UserV1MFAOTPCheckFailedType},
userView: &UserSessionView{SecondFactorVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), SecondFactorVerification: time.Time{}},
@@ -171,7 +171,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append human otp check failed event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.HumanMFAOTPCheckFailedType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.HumanMFAOTPCheckFailedType},
userView: &UserSessionView{SecondFactorVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), SecondFactorVerification: time.Time{}},
@@ -179,7 +179,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append user otp removed event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.UserV1MFAOTPRemovedType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.UserV1MFAOTPRemovedType},
userView: &UserSessionView{SecondFactorVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), SecondFactorVerification: time.Time{}},
@@ -187,7 +187,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append human otp removed event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.HumanMFAOTPRemovedType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.HumanMFAOTPRemovedType},
userView: &UserSessionView{SecondFactorVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), SecondFactorVerification: time.Time{}},
@@ -195,7 +195,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append user signed out event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.UserV1SignedOutType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.UserV1SignedOutType},
userView: &UserSessionView{PasswordVerification: now(), SecondFactorVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), PasswordVerification: time.Time{}, SecondFactorVerification: time.Time{}, State: 1},
@@ -203,7 +203,7 @@ func TestAppendEvent(t *testing.T) {
{
name: "append human signed out event",
args: args{
- event: &es_models.Event{CreationDate: now(), Type: es_models.EventType(user.HumanSignedOutType)},
+ event: &es_models.Event{CreationDate: now(), Typ: user.HumanSignedOutType},
userView: &UserSessionView{PasswordVerification: now(), SecondFactorVerification: now()},
},
result: &UserSessionView{ChangeDate: now(), PasswordVerification: time.Time{}, SecondFactorVerification: time.Time{}, State: 1},
diff --git a/internal/user/repository/view/model/user_test.go b/internal/user/repository/view/model/user_test.go
index 6fa5261cc1..36f19742c2 100644
--- a/internal/user/repository/view/model/user_test.go
+++ b/internal/user/repository/view/model/user_test.go
@@ -6,6 +6,7 @@ import (
"time"
"github.com/zitadel/zitadel/internal/crypto"
+ "github.com/zitadel/zitadel/internal/eventstore"
es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
"github.com/zitadel/zitadel/internal/repository/user"
"github.com/zitadel/zitadel/internal/user/model"
@@ -76,7 +77,7 @@ func getFullMachine() *es_model.User {
func TestUserAppendEvent(t *testing.T) {
type args struct {
- event *es_models.Event
+ event eventstore.Event
user *UserView
}
tests := []struct {
@@ -87,7 +88,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append added user event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1AddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1AddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
user: &UserView{},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
@@ -95,7 +96,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append added human event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanAddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanAddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(nil))},
user: &UserView{},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
@@ -103,7 +104,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append added machine event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.MachineAddedEventType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullMachine())},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.MachineAddedEventType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullMachine())},
user: &UserView{},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", MachineView: &MachineView{Description: "Description", Name: "Machine"}, State: int32(model.UserStateActive)},
@@ -111,7 +112,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append added user with password event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1AddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{Secret: &crypto.CryptoValue{}}))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1AddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{Secret: &crypto.CryptoValue{}}))},
user: &UserView{},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", PasswordSet: true}, State: int32(model.UserStateInitial)},
@@ -119,7 +120,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append added human with password event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanAddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{Secret: &crypto.CryptoValue{}}))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanAddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{Secret: &crypto.CryptoValue{}}))},
user: &UserView{},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", PasswordSet: true}, State: int32(model.UserStateInitial)},
@@ -127,7 +128,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append added user with password but change required event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1AddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}}))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1AddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}}))},
user: &UserView{},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", PasswordSet: true, PasswordChangeRequired: true}, State: int32(model.UserStateInitial)},
@@ -135,7 +136,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append added human with password but change required event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanAddedType), ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}}))},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanAddedType, ResourceOwner: "GrantedOrgID", Data: mockUserData(getFullHuman(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}}))},
user: &UserView{},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", PasswordSet: true, PasswordChangeRequired: true}, State: int32(model.UserStateInitial)},
@@ -143,7 +144,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append password change event on user",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1PasswordChangedType), ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{Secret: &crypto.CryptoValue{}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1PasswordChangedType, ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{Secret: &crypto.CryptoValue{}})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country", PasswordSet: true}, State: int32(model.UserStateActive)},
@@ -151,7 +152,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append password change event on human",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanPasswordChangedType), ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{Secret: &crypto.CryptoValue{}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanPasswordChangedType, ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{Secret: &crypto.CryptoValue{}})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country", PasswordSet: true}, State: int32(model.UserStateActive)},
@@ -159,7 +160,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append password change with change required event on user",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1PasswordChangedType), ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1PasswordChangedType, ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country", PasswordSet: true, PasswordChangeRequired: true}, State: int32(model.UserStateActive)},
@@ -167,7 +168,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append password change with change required event on human",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanPasswordChangedType), ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanPasswordChangedType, ResourceOwner: "GrantedOrgID", Data: mockPasswordData(&es_model.Password{ChangeRequired: true, Secret: &crypto.CryptoValue{}})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country", PasswordSet: true, PasswordChangeRequired: true}, State: int32(model.UserStateActive)},
@@ -175,7 +176,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change user profile event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1ProfileChangedType), ResourceOwner: "GrantedOrgID", Data: mockProfileData(&es_model.Profile{FirstName: "FirstNameChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1ProfileChangedType, ResourceOwner: "GrantedOrgID", Data: mockProfileData(&es_model.Profile{FirstName: "FirstNameChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstNameChanged", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
@@ -183,7 +184,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change human profile event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanProfileChangedType), ResourceOwner: "GrantedOrgID", Data: mockProfileData(&es_model.Profile{FirstName: "FirstNameChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanProfileChangedType, ResourceOwner: "GrantedOrgID", Data: mockProfileData(&es_model.Profile{FirstName: "FirstNameChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstNameChanged", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
@@ -191,7 +192,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change user email event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1EmailChangedType), ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1EmailChangedType, ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "EmailChanged", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -199,7 +200,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change human email event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanEmailChangedType), ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanEmailChangedType, ResourceOwner: "GrantedOrgID", Data: mockEmailData(&es_model.Email{EmailAddress: "EmailChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "EmailChanged", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -207,7 +208,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append verify user email event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1EmailVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1EmailVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -215,7 +216,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append verify human email event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanEmailVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanEmailVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInitial)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -223,7 +224,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change user phone event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1PhoneChangedType), ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1PhoneChangedType, ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "PhoneChanged", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -231,7 +232,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change human phone event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanPhoneChangedType), ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanPhoneChangedType, ResourceOwner: "GrantedOrgID", Data: mockPhoneData(&es_model.Phone{PhoneNumber: "PhoneChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "PhoneChanged", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -239,7 +240,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append verify user phone event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1PhoneVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1PhoneVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", IsPhoneVerified: true, Country: "Country"}, State: int32(model.UserStateActive)},
@@ -247,7 +248,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append verify human phone event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanPhoneVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanPhoneVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", IsPhoneVerified: true, Country: "Country"}, State: int32(model.UserStateActive)},
@@ -255,7 +256,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change user address event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1AddressChangedType), ResourceOwner: "GrantedOrgID", Data: mockAddressData(&es_model.Address{Country: "CountryChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1AddressChangedType, ResourceOwner: "GrantedOrgID", Data: mockAddressData(&es_model.Address{Country: "CountryChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "CountryChanged"}, State: int32(model.UserStateActive)},
@@ -263,7 +264,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append change human address event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanAddressChangedType), ResourceOwner: "GrantedOrgID", Data: mockAddressData(&es_model.Address{Country: "CountryChanged"})},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanAddressChangedType, ResourceOwner: "GrantedOrgID", Data: mockAddressData(&es_model.Address{Country: "CountryChanged"})},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", IsEmailVerified: true, Phone: "Phone", Country: "CountryChanged"}, State: int32(model.UserStateActive)},
@@ -271,7 +272,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user deactivate event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserDeactivatedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserDeactivatedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInactive)},
@@ -279,7 +280,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user reactivate event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserReactivatedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserReactivatedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateInactive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -287,7 +288,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user lock event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserLockedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserLockedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateLocked)},
@@ -295,7 +296,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user unlock event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserUnlockedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserUnlockedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateLocked)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
@@ -303,7 +304,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user add otp event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1MFAOTPAddedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1MFAOTPAddedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateNotReady)}, State: int32(model.UserStateActive)},
@@ -311,7 +312,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append human add otp event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanMFAOTPAddedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanMFAOTPAddedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateNotReady)}, State: int32(model.UserStateActive)},
@@ -319,7 +320,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user verify otp event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1MFAOTPVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1MFAOTPVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateNotReady)}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateReady)}, State: int32(model.UserStateActive)},
@@ -327,7 +328,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append human verify otp event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanMFAOTPVerifiedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanMFAOTPVerifiedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateNotReady)}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateReady)}, State: int32(model.UserStateActive)},
@@ -335,7 +336,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user remove otp event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.UserV1MFAOTPRemovedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.UserV1MFAOTPRemovedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateReady)}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateUnspecified)}, State: int32(model.UserStateActive)},
@@ -343,7 +344,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append human remove otp event",
args: args{
- event: &es_models.Event{AggregateID: "AggregateID", Sequence: 1, Type: es_models.EventType(user.HumanMFAOTPRemovedType), ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{AggregateID: "AggregateID", Seq: 1, Typ: user.HumanMFAOTPRemovedType, ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateReady)}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", OTPState: int32(model.MFAStateUnspecified)}, State: int32(model.UserStateActive)},
@@ -351,7 +352,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append user mfa init skipped event",
args: args{
- event: &es_models.Event{Sequence: 1, CreationDate: time.Now().UTC(), Type: es_models.EventType(user.UserV1MFAInitSkippedType), AggregateID: "AggregateID", ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{Seq: 1, CreationDate: time.Now().UTC(), Typ: user.UserV1MFAInitSkippedType, AggregateID: "AggregateID", ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", MFAInitSkipped: time.Now().UTC()}, State: int32(model.UserStateActive)},
@@ -359,7 +360,7 @@ func TestUserAppendEvent(t *testing.T) {
{
name: "append human mfa init skipped event",
args: args{
- event: &es_models.Event{Sequence: 1, CreationDate: time.Now().UTC(), Type: es_models.EventType(user.HumanMFAInitSkippedType), AggregateID: "AggregateID", ResourceOwner: "GrantedOrgID"},
+ event: &es_models.Event{Seq: 1, CreationDate: time.Now().UTC(), Typ: user.HumanMFAInitSkippedType, AggregateID: "AggregateID", ResourceOwner: "GrantedOrgID"},
user: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country"}, State: int32(model.UserStateActive)},
},
result: &UserView{ID: "AggregateID", ResourceOwner: "GrantedOrgID", UserName: "UserName", HumanView: &HumanView{FirstName: "FirstName", LastName: "LastName", Email: "Email", Phone: "Phone", Country: "Country", MFAInitSkipped: time.Now().UTC()}, State: int32(model.UserStateActive)},
diff --git a/internal/user/repository/view/query.go b/internal/user/repository/view/query.go
index c35188a229..eb362a378c 100644
--- a/internal/user/repository/view/query.go
+++ b/internal/user/repository/view/query.go
@@ -2,20 +2,21 @@ package view
import (
"github.com/zitadel/zitadel/internal/errors"
- es_models "github.com/zitadel/zitadel/internal/eventstore/v1/models"
+ "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/repository/user"
)
-func UserByIDQuery(id, instanceID string, latestSequence uint64, eventTypes []es_models.EventType) (*es_models.SearchQuery, error) {
+func UserByIDQuery(id, instanceID string, sequence uint64, eventTypes []eventstore.EventType) (*eventstore.SearchQueryBuilder, error) {
if id == "" {
return nil, errors.ThrowPreconditionFailed(nil, "EVENT-d8isw", "Errors.User.UserIDMissing")
}
- return es_models.NewSearchQuery().
+ return eventstore.NewSearchQueryBuilder(eventstore.ColumnsEvent).
+ AwaitOpenTransactions().
+ InstanceID(instanceID).
+ SequenceGreater(sequence).
AddQuery().
- AggregateTypeFilter(user.AggregateType).
- AggregateIDFilter(id).
- EventTypesFilter(eventTypes...).
- LatestSequenceFilter(latestSequence).
- InstanceIDFilter(instanceID).
- SearchQuery(), nil
+ AggregateTypes(user.AggregateType).
+ AggregateIDs(id).
+ EventTypes(eventTypes...).
+ Builder(), nil
}
diff --git a/internal/user/repository/view/user_view.go b/internal/user/repository/view/user_view.go
index f70fcf393e..c0b5d2af7c 100644
--- a/internal/user/repository/view/user_view.go
+++ b/internal/user/repository/view/user_view.go
@@ -144,76 +144,6 @@ func UsersByOrgID(db *gorm.DB, table, orgID, instanceID string) ([]*model.UserVi
return users, err
}
-func UserIDsByDomain(db *gorm.DB, table, orgDomain, instanceID string) ([]string, error) {
- type id struct {
- Id string
- }
- ids := make([]id, 0)
- orgIDQuery := &usr_model.UserSearchQuery{
- Key: usr_model.UserSearchKeyUserName,
- Method: domain.SearchMethodEndsWithIgnoreCase,
- Value: "%" + orgDomain,
- }
- instanceIDQuery := &usr_model.UserSearchQuery{
- Key: usr_model.UserSearchKeyInstanceID,
- Method: domain.SearchMethodEquals,
- Value: instanceID,
- }
- ownerRemovedQuery := &usr_model.UserSearchQuery{
- Key: usr_model.UserSearchOwnerRemoved,
- Method: domain.SearchMethodEquals,
- Value: false,
- }
- query := repository.PrepareSearchQuery(table, model.UserSearchRequest{
- Queries: []*usr_model.UserSearchQuery{orgIDQuery, instanceIDQuery, ownerRemovedQuery},
- })
- _, err := query(db, &ids)
- if err != nil {
- return nil, err
- }
- users := make([]string, len(ids))
- for i, id := range ids {
- users[i] = id.Id
- }
- return users, err
-}
-
-func SearchUsers(db *gorm.DB, table string, req *usr_model.UserSearchRequest) ([]*model.UserView, uint64, error) {
- users := make([]*model.UserView, 0)
- query := repository.PrepareSearchQuery(table, model.UserSearchRequest{Limit: req.Limit, Offset: req.Offset, Queries: req.Queries})
- count, err := query(db, &users)
- if err != nil {
- return nil, 0, err
- }
- return users, count, nil
-}
-
-func GetGlobalUserByLoginName(db *gorm.DB, table, loginName, instanceID string) (*model.UserView, error) {
- user := new(model.UserView)
- query := repository.PrepareGetByQuery(table,
- &model.UserSearchQuery{Key: usr_model.UserSearchKeyLoginNames, Value: loginName, Method: domain.SearchMethodListContains},
- &model.UserSearchQuery{Key: usr_model.UserSearchKeyInstanceID, Value: instanceID, Method: domain.SearchMethodEquals},
- &model.UserSearchQuery{Key: usr_model.UserSearchOwnerRemoved, Value: false, Method: domain.SearchMethodEquals},
- )
- err := query(db, user)
- if caos_errs.IsNotFound(err) {
- return nil, caos_errs.ThrowNotFound(nil, "VIEW-8uWer", "Errors.User.NotFound")
- }
- user.SetEmptyUserType()
- return user, err
-}
-
-func UserMFAs(db *gorm.DB, table, userID, instanceID string) ([]*usr_model.MultiFactor, error) {
- user, err := UserByID(db, table, userID, instanceID)
- if err != nil {
- return nil, err
- }
- if user.OTPState == int32(usr_model.MFAStateUnspecified) {
- return []*usr_model.MultiFactor{}, nil
- }
- return []*usr_model.MultiFactor{{Type: usr_model.MFATypeOTP, State: usr_model.MFAState(user.OTPState)}}, nil
-}
-
func PutUsers(db *gorm.DB, table string, users ...*model.UserView) error {
save := repository.PrepareBulkSave(table)
u := make([]interface{}, len(users))
diff --git a/internal/view/model/failed_event.go b/internal/view/model/failed_event.go
deleted file mode 100644
index f270ae4192..0000000000
--- a/internal/view/model/failed_event.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package model
-
-import "time"
-
-type FailedEvent struct {
- Database string
- ViewName string
- FailedSequence uint64
- FailureCount uint64
- ErrMsg string
- InstanceID string
- LastFailed time.Time
-}
diff --git a/internal/view/model/general_query.go b/internal/view/model/general_query.go
deleted file mode 100644
index c528f1dda5..0000000000
--- a/internal/view/model/general_query.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package model
-
-import (
- "github.com/zitadel/zitadel/internal/domain"
-)
-
-type GeneralSearchRequest struct {
- Offset uint64
- Limit uint64
- SortingColumn GeneralSearchKey
- Asc bool
- Queries []*GeneralSearchQuery
-}
-
-type GeneralSearchKey int32
-
-const (
- GeneralSearchKeyUnspecified GeneralSearchKey = iota
-)
-
-type GeneralSearchQuery struct {
- Key GeneralSearchKey
- Method domain.SearchMethod
- Value interface{}
-}
diff --git a/internal/view/model/view.go b/internal/view/model/view.go
deleted file mode 100644
index 6f766b912b..0000000000
--- a/internal/view/model/view.go
+++ /dev/null
@@ -1,13 +0,0 @@
-package model
-
-import (
- "time"
-)
-
-type View struct {
- Database string
- ViewName string
- CurrentSequence uint64
- EventTimestamp time.Time
- LastSuccessfulSpoolerRun time.Time
-}
diff --git a/internal/view/repository/failed_events.go b/internal/view/repository/failed_events.go
deleted file mode 100644
index 6eb75c203c..0000000000
--- a/internal/view/repository/failed_events.go
+++ /dev/null
@@ -1,180 +0,0 @@
-package repository
-
-import (
- "strings"
- "time"
-
- "github.com/jinzhu/gorm"
-
- "github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/errors"
- view_model "github.com/zitadel/zitadel/internal/view/model"
-)
-
-type FailedEvent struct {
- ViewName string `gorm:"column:view_name;primary_key"`
- FailedSequence uint64 `gorm:"column:failed_sequence;primary_key"`
- FailureCount uint64 `gorm:"column:failure_count"`
- ErrMsg string `gorm:"column:err_msg"`
- InstanceID string `gorm:"column:instance_id"`
- LastFailed time.Time `gorm:"column:last_failed"`
-}
-
-type failedEventSearchRequest struct {
- Offset uint64
- Limit uint64
- SortingColumn failedEventSearchKey
- Asc bool
- Queries []*FailedEventSearchQuery
-}
-
-func (f failedEventSearchRequest) GetLimit() uint64 {
- return f.Limit
-}
-
-func (f failedEventSearchRequest) GetOffset() uint64 {
- return f.Offset
-}
-
-func (f failedEventSearchRequest) GetSortingColumn() ColumnKey {
- if f.SortingColumn == failedEventSearchKey(FailedEventKeyUndefined) {
- return nil
- }
- return f.SortingColumn
-}
-
-func (f failedEventSearchRequest) GetAsc() bool {
- return f.Asc
-}
-
-func (f failedEventSearchRequest) GetQueries() []SearchQuery {
- result := make([]SearchQuery, len(f.Queries))
- for i, q := range f.Queries {
- result[i] = q
- }
- return result
-}
-
-type FailedEventSearchQuery struct {
- Key FailedEventSearchKey
- Method domain.SearchMethod
- Value interface{}
-}
-
-func (req FailedEventSearchQuery) GetKey() ColumnKey {
- return failedEventSearchKey(req.Key)
-}
-
-func (req FailedEventSearchQuery) GetMethod() domain.SearchMethod {
- return req.Method
-}
-
-func (req FailedEventSearchQuery) GetValue() interface{} {
- return req.Value
-}
-
-type FailedEventSearchKey int32
-
-const (
- FailedEventKeyUndefined FailedEventSearchKey = iota
- FailedEventKeyViewName
- FailedEventKeyFailedSequence
- FailedEventKeyInstanceID
- FailedEventKeyLastFailed
-)
-
-type failedEventSearchKey FailedEventSearchKey
-
-func (key failedEventSearchKey) ToColumnName() string {
- switch FailedEventSearchKey(key) {
- case FailedEventKeyViewName:
- return "view_name"
- case FailedEventKeyFailedSequence:
- return "failed_sequence"
- case FailedEventKeyInstanceID:
- return "instance_id"
- case FailedEventKeyLastFailed:
- return "last_failed"
- default:
- return ""
- }
-}
-
-func FailedEventFromModel(failedEvent *view_model.FailedEvent) *FailedEvent {
- return &FailedEvent{
- ViewName: failedEvent.Database + "." + failedEvent.ViewName,
- FailureCount: failedEvent.FailureCount,
- FailedSequence: failedEvent.FailedSequence,
- InstanceID: failedEvent.InstanceID,
- ErrMsg: failedEvent.ErrMsg,
- }
-}
-func FailedEventToModel(failedEvent *FailedEvent) *view_model.FailedEvent {
- dbView := strings.Split(failedEvent.ViewName, ".")
- return &view_model.FailedEvent{
- Database: dbView[0],
- ViewName: dbView[1],
- FailureCount: failedEvent.FailureCount,
- FailedSequence: failedEvent.FailedSequence,
- ErrMsg: failedEvent.ErrMsg,
- LastFailed: failedEvent.LastFailed,
- }
-}
-
-func SaveFailedEvent(db *gorm.DB, table string, failedEvent *FailedEvent) error {
- save := PrepareSave(table)
- err := save(db, failedEvent)
-
- if err != nil {
- return errors.ThrowInternal(err, "VIEW-4F8us", "unable to updated failed events")
- }
- return nil
-}
-
-func RemoveFailedEvent(db *gorm.DB, table string, failedEvent *FailedEvent) error {
- delete := PrepareDeleteByKeys(table,
- Key{Key: failedEventSearchKey(FailedEventKeyViewName), Value: failedEvent.ViewName},
- Key{Key: failedEventSearchKey(FailedEventKeyFailedSequence), Value: failedEvent.FailedSequence},
- Key{Key: failedEventSearchKey(FailedEventKeyInstanceID), Value: failedEvent.InstanceID},
- )
- return delete(db)
-}
-
-func LatestFailedEvent(db *gorm.DB, table, viewName, instanceID string, sequence uint64) (*FailedEvent, error) {
- failedEvent := new(FailedEvent)
- queries := []SearchQuery{
- FailedEventSearchQuery{Key: FailedEventKeyViewName, Method: domain.SearchMethodEqualsIgnoreCase, Value: viewName},
- FailedEventSearchQuery{Key: FailedEventKeyFailedSequence, Method: domain.SearchMethodEquals, Value: sequence},
- FailedEventSearchQuery{Key: FailedEventKeyInstanceID, Method: domain.SearchMethodEquals, Value: instanceID},
- }
- query := PrepareGetByQuery(table, queries...)
- err := query(db, failedEvent)
-
- if err == nil && failedEvent.ViewName != "" {
- return failedEvent, nil
- }
-
- if errors.IsNotFound(err) {
- return &FailedEvent{
- ViewName: viewName,
- FailedSequence: sequence,
- FailureCount: 0,
- }, nil
- }
- return nil, errors.ThrowInternalf(err, "VIEW-9LyCB", "unable to get failed events of %s", viewName)
-
-}
-
-func AllFailedEvents(db *gorm.DB, table, instanceID string) ([]*FailedEvent, error) {
- queries := make([]*FailedEventSearchQuery, 0, 1)
- if instanceID != "" {
- queries = append(queries, &FailedEventSearchQuery{Key: FailedEventKeyInstanceID, Method: domain.SearchMethodEquals, Value: instanceID})
- }
- failedEvents := make([]*FailedEvent, 0)
- query := PrepareSearchQuery(table, &failedEventSearchRequest{SortingColumn: failedEventSearchKey(FailedEventKeyLastFailed), Queries: queries})
- _, err := query(db, &failedEvents)
- if err != nil {
- return nil, err
- }
- return failedEvents, nil
-}
diff --git a/internal/view/repository/general_query.go b/internal/view/repository/general_query.go
deleted file mode 100644
index 6b27d3d79f..0000000000
--- a/internal/view/repository/general_query.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package repository
-
-import (
- "github.com/zitadel/zitadel/internal/domain"
- "github.com/zitadel/zitadel/internal/view/model"
-)
-
-type GeneralSearchRequest model.GeneralSearchRequest
-type GeneralSearchQuery model.GeneralSearchQuery
-type GeneralSearchKey model.GeneralSearchKey
-
-func (req GeneralSearchRequest) GetLimit() uint64 {
- return req.Limit
-}
-
-func (req GeneralSearchRequest) GetOffset() uint64 {
- return req.Offset
-}
-
-func (req GeneralSearchRequest) GetSortingColumn() ColumnKey {
- if req.SortingColumn == model.GeneralSearchKeyUnspecified {
- return nil
- }
- return GeneralSearchKey(req.SortingColumn)
-}
-
-func (req GeneralSearchRequest) GetAsc() bool {
- return req.Asc
-}
-
-func (req GeneralSearchRequest) GetQueries() []SearchQuery {
- result := make([]SearchQuery, len(req.Queries))
- for i, q := range req.Queries {
- result[i] = GeneralSearchQuery{Key: q.Key, Value: q.Value, Method: q.Method}
- }
- return result
-}
-
-func (req GeneralSearchQuery) GetKey() ColumnKey {
- return GeneralSearchKey(req.Key)
-}
-
-func (req GeneralSearchQuery) GetMethod() domain.SearchMethod {
- return req.Method
-}
-
-func (req GeneralSearchQuery) GetValue() interface{} {
- return req.Value
-}
-
-func (key GeneralSearchKey) ToColumnName() string {
- return ""
-}
diff --git a/internal/view/repository/query.go b/internal/view/repository/query.go
index 77d27c75be..ba18c71ba3 100644
--- a/internal/view/repository/query.go
+++ b/internal/view/repository/query.go
@@ -139,7 +139,7 @@ func SetQuery(query *gorm.DB, key ColumnKey, value interface{}, method domain.Se
if !ok {
return nil, caos_errs.ThrowInvalidArgument(nil, "VIEW-Psois", "list contains only possible for strings")
}
- query = query.Where("? <@ "+column, database.StringArray{valueText})
+ query = query.Where("? <@ "+column, database.TextArray[string]{valueText})
default:
return nil, nil
}
diff --git a/internal/view/repository/requests.go b/internal/view/repository/requests.go
index 74921fbcbb..9de4f9fcdd 100644
--- a/internal/view/repository/requests.go
+++ b/internal/view/repository/requests.go
@@ -13,30 +13,6 @@ import (
caos_errs "github.com/zitadel/zitadel/internal/errors"
)
-func PrepareGetByKey(table string, key ColumnKey, id string) func(db *gorm.DB, res interface{}) error {
- return func(db *gorm.DB, res interface{}) error {
- tx := db.BeginTx(context.Background(), &sql.TxOptions{ReadOnly: true})
- defer func() {
- if err := tx.Commit().Error; err != nil {
- logging.OnError(err).Info("commit failed")
- }
- }()
-
- err := tx.Table(table).
- Where(fmt.Sprintf("%s = ?", key.ToColumnName()), id).
- Take(res).
- Error
- if err == nil {
- return nil
- }
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return caos_errs.ThrowNotFound(err, "VIEW-XRI9c", "object not found")
- }
- logging.LogWithFields("VIEW-xVShS", "AggregateID", id).WithError(err).Warn("get from view error")
- return caos_errs.ThrowInternal(err, "VIEW-J92Td", "Errors.Internal")
- }
-}
-
func PrepareGetByQuery(table string, queries ...SearchQuery) func(db *gorm.DB, res interface{}) error {
return func(db *gorm.DB, res interface{}) error {
query := db.Table(table)
@@ -161,27 +137,3 @@ func PrepareDeleteByKeys(table string, keys ...Key) func(db *gorm.DB) error {
return nil
}
}
-
-func PrepareDeleteByObject(table string, object interface{}) func(db *gorm.DB) error {
- return func(db *gorm.DB) error {
- err := db.Table(table).
- Delete(object).
- Error
- if err != nil {
- return caos_errs.ThrowInternal(err, "VIEW-lso9w", "could not delete object")
- }
- return nil
- }
-}
-
-func PrepareTruncate(table string) func(db *gorm.DB) error {
- return func(db *gorm.DB) error {
- err := db.
- Exec("TRUNCATE " + table).
- Error
- if err != nil {
- return caos_errs.ThrowInternal(err, "VIEW-lso9w", "could not truncate table")
- }
- return nil
- }
-}
diff --git a/internal/view/repository/requests_test.go b/internal/view/repository/requests_test.go
index 46c4e1532f..c852d15a7f 100644
--- a/internal/view/repository/requests_test.go
+++ b/internal/view/repository/requests_test.go
@@ -9,90 +9,6 @@ import (
caos_errs "github.com/zitadel/zitadel/internal/errors"
)
-func TestPrepareGetByKey(t *testing.T) {
- type args struct {
- table string
- key ColumnKey
- value string
- }
- type res struct {
- result Test
- wantErr bool
- errFunc func(err error) bool
- }
- tests := []struct {
- name string
- db *dbMock
- args args
- res res
- }{
- {
- "ok",
- mockDB(t).
- expectGetByID("TESTTABLE", "test", "VALUE"),
- args{
- table: "TESTTABLE",
- key: TestSearchKey_TEST,
- value: "VALUE",
- },
- res{
- result: Test{ID: "VALUE"},
- wantErr: false,
- },
- },
- {
- "not found",
- mockDB(t).
- expectGetByIDErr("TESTTABLE", "test", "VALUE", gorm.ErrRecordNotFound),
- args{
- table: "TESTTABLE",
- key: TestSearchKey_TEST,
- value: "VALUE",
- },
- res{
- result: Test{ID: "VALUE"},
- wantErr: true,
- errFunc: caos_errs.IsNotFound,
- },
- },
- {
- "db err",
- mockDB(t).
- expectGetByIDErr("TESTTABLE", "test", "VALUE", gorm.ErrUnaddressable),
- args{
- table: "TESTTABLE",
- key: TestSearchKey_TEST,
- value: "VALUE",
- },
- res{
- result: Test{ID: "VALUE"},
- wantErr: true,
- errFunc: caos_errs.IsInternal,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- res := &Test{}
- getByID := PrepareGetByKey(tt.args.table, tt.args.key, tt.args.value)
- err := getByID(tt.db.db, res)
-
- if !tt.res.wantErr && err != nil {
- t.Errorf("got wrong err should be nil: %v ", err)
- }
-
- if tt.res.wantErr && !tt.res.errFunc(err) {
- t.Errorf("got wrong err: %v ", err)
- }
- if err := tt.db.mock.ExpectationsWereMet(); err != nil {
- t.Errorf("there were unfulfilled expectations: %s", err)
- }
-
- tt.db.close()
- })
- }
-}
-
func TestPrepareGetByQuery(t *testing.T) {
type args struct {
table string
@@ -483,86 +399,3 @@ func TestPrepareDeleteByKeys(t *testing.T) {
})
}
}
-
-func TestPrepareDeleteByObject(t *testing.T) {
- type args struct {
- table string
- object interface{}
- }
- type res struct {
- result Test
- wantErr bool
- errFunc func(err error) bool
- }
- tests := []struct {
- name string
- db *dbMock
- args args
- res res
- }{
- {
- "delete",
- mockDB(t).
- expectBegin(nil).
- expectRemoveByObject("TESTTABLE", Test{ID: "VALUE", Test: "TEST"}).
- expectCommit(nil),
- args{
- table: "TESTTABLE",
- object: &Test{ID: "VALUE", Test: "TEST"},
- },
- res{
- result: Test{ID: "VALUE"},
- wantErr: false,
- },
- },
- {
- "delete multiple PK",
- mockDB(t).
- expectBegin(nil).
- expectRemoveByObjectMultiplePKs("TESTTABLE", TestMultiplePK{TestID: "TESTID", HodorID: "HODORID", Test: "TEST"}).
- expectCommit(nil),
- args{
- table: "TESTTABLE",
- object: &TestMultiplePK{TestID: "TESTID", HodorID: "HODORID", Test: "TEST"},
- },
- res{
- wantErr: false,
- },
- },
- {
- "db error",
- mockDB(t).
- expectBegin(nil).
- expectRemoveErr("TESTTABLE", "id", "VALUE", gorm.ErrUnaddressable).
- expectCommit(nil),
- args{
- table: "TESTTABLE",
- object: &Test{ID: "VALUE", Test: "TEST"},
- },
- res{
- result: Test{ID: "VALUE"},
- wantErr: true,
- errFunc: caos_errs.IsInternal,
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- getDelete := PrepareDeleteByObject(tt.args.table, tt.args.object)
- err := getDelete(tt.db.db)
-
- if !tt.res.wantErr && err != nil {
- t.Errorf("got wrong err should be nil: %v ", err)
- }
-
- if tt.res.wantErr && !tt.res.errFunc(err) {
- t.Errorf("got wrong err: %v ", err)
- }
- if err := tt.db.mock.ExpectationsWereMet(); !tt.res.wantErr && err != nil {
- t.Errorf("there were unfulfilled expectations: %s", err)
- }
-
- tt.db.close()
- })
- }
-}
diff --git a/internal/view/repository/sequence.go b/internal/view/repository/sequence.go
deleted file mode 100644
index 5ccb7a36f7..0000000000
--- a/internal/view/repository/sequence.go
+++ /dev/null
@@ -1,216 +0,0 @@
-package repository
-
-import (
- "strings"
- "time"
-
- "github.com/jinzhu/gorm"
-
- "github.com/zitadel/zitadel/internal/domain"
- caos_errs "github.com/zitadel/zitadel/internal/errors"
- "github.com/zitadel/zitadel/internal/view/model"
-)
-
-type CurrentSequence struct {
- ViewName string `gorm:"column:view_name;primary_key"`
- CurrentSequence uint64 `gorm:"column:current_sequence"`
- EventTimestamp time.Time `gorm:"column:event_timestamp"`
- LastSuccessfulSpoolerRun time.Time `gorm:"column:last_successful_spooler_run"`
- InstanceID string `gorm:"column:instance_id;primary_key"`
-}
-
-type currentSequenceViewWithSequence struct {
- ViewName string `gorm:"column:view_name;primary_key"`
- CurrentSequence uint64 `gorm:"column:current_sequence"`
- LastSuccessfulSpoolerRun time.Time `gorm:"column:last_successful_spooler_run"`
-}
-
-type currentSequenceView struct {
- ViewName string `gorm:"column:view_name;primary_key"`
- LastSuccessfulSpoolerRun time.Time `gorm:"column:last_successful_spooler_run"`
-}
-
-type SequenceSearchKey int32
-
-const (
- SequenceSearchKeyUndefined SequenceSearchKey = iota
- SequenceSearchKeyViewName
- SequenceSearchKeyAggregateType
- SequenceSearchKeyInstanceID
-)
-
-type sequenceSearchKey SequenceSearchKey
-
-func (key sequenceSearchKey) ToColumnName() string {
- switch SequenceSearchKey(key) {
- case SequenceSearchKeyViewName:
- return "view_name"
- case SequenceSearchKeyAggregateType:
- return "aggregate_type"
- case SequenceSearchKeyInstanceID:
- return "instance_id"
- default:
- return ""
- }
-}
-
-type sequenceSearchQuery struct {
- key sequenceSearchKey
- method domain.SearchMethod
- value interface{}
-}
-
-func (q *sequenceSearchQuery) GetKey() ColumnKey {
- return q.key
-}
-
-func (q *sequenceSearchQuery) GetMethod() domain.SearchMethod {
- return q.method
-}
-
-func (q *sequenceSearchQuery) GetValue() interface{} {
- return q.value
-}
-
-type sequenceSearchRequest struct {
- queries []sequenceSearchQuery
-}
-
-func (s *sequenceSearchRequest) GetLimit() uint64 {
- return 0
-}
-
-func (s *sequenceSearchRequest) GetOffset() uint64 {
- return 0
-}
-
-func (s *sequenceSearchRequest) GetSortingColumn() ColumnKey {
- return nil
-}
-
-func (s *sequenceSearchRequest) GetAsc() bool {
- return false
-}
-
-func (s *sequenceSearchRequest) GetQueries() []SearchQuery {
- result := make([]SearchQuery, len(s.queries))
- for i, q := range s.queries {
- result[i] = &sequenceSearchQuery{key: q.key, value: q.value, method: q.method}
- }
- return result
-}
-
-func CurrentSequenceToModel(sequence *CurrentSequence) *model.View {
- dbView := strings.Split(sequence.ViewName, ".")
- return &model.View{
- Database: dbView[0],
- ViewName: dbView[1],
- CurrentSequence: sequence.CurrentSequence,
- EventTimestamp: sequence.EventTimestamp,
- LastSuccessfulSpoolerRun: sequence.LastSuccessfulSpoolerRun,
- }
-}
-
-func SaveCurrentSequence(db *gorm.DB, table, viewName, instanceID string, sequence uint64, eventTimestamp time.Time) error {
- return UpdateCurrentSequence(db, table, &CurrentSequence{viewName, sequence, eventTimestamp, time.Now(), instanceID})
-}
-
-func SaveCurrentSequences(db *gorm.DB, table, viewName string, sequence uint64, eventTimestamp time.Time) error {
- err := db.Table(table).Where("view_name = ?", viewName).
- Updates(map[string]interface{}{"current_sequence": sequence, "event_timestamp": eventTimestamp, "last_successful_spooler_run": time.Now()}).Error
- if err != nil {
- return caos_errs.ThrowInternal(err, "VIEW-Sfdqs", "unable to updated processed sequence")
- }
- return nil
-}
-
-func UpdateCurrentSequence(db *gorm.DB, table string, currentSequence *CurrentSequence) (err error) {
- save := PrepareSave(table)
- err = save(db, currentSequence)
- if err != nil {
- return caos_errs.ThrowInternal(err, "VIEW-5kOhP", "unable to updated processed sequence")
- }
- return nil
-}
-
-func UpdateCurrentSequences(db *gorm.DB, table string, currentSequences []*CurrentSequence) (err error) {
- save := PrepareBulkSave(table)
- s := make([]interface{}, len(currentSequences))
- for i, currentSequence := range currentSequences {
- s[i] = currentSequence
- }
- err = save(db, s...)
- if err != nil {
- return caos_errs.ThrowInternal(err, "VIEW-5kOhP", "unable to updated processed sequence")
- }
- return nil
-}
-
-func LatestSequence(db *gorm.DB, table, viewName, instanceID string) (*CurrentSequence, error) {
- searchQueries := []SearchQuery{
- &sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyViewName), value: viewName, method: domain.SearchMethodEquals},
- &sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyInstanceID), value: instanceID, method: domain.SearchMethodIsOneOf},
- }
-
- // ensure highest sequence of view
- db = db.Order("current_sequence DESC")
-
- query := PrepareGetByQuery(table, searchQueries...)
- sequence := new(CurrentSequence)
- err := query(db, sequence)
-
- if err == nil {
- return sequence, nil
- }
-
- if caos_errs.IsNotFound(err) {
- return sequence, nil
- }
- return nil, caos_errs.ThrowInternalf(err, "VIEW-9LyCB", "unable to get latest sequence of %s", viewName)
-}
-
-func LatestSequences(db *gorm.DB, table, viewName string, instanceIDs []string) ([]*CurrentSequence, error) {
- searchQueries := []sequenceSearchQuery{
- {key: sequenceSearchKey(SequenceSearchKeyViewName), value: viewName, method: domain.SearchMethodEquals},
- }
- if len(instanceIDs) > 0 {
- searchQueries = append(searchQueries, sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyInstanceID), value: instanceIDs, method: domain.SearchMethodIsOneOf})
- }
- searchRequest := &sequenceSearchRequest{
- queries: searchQueries,
- }
-
- // ensure highest sequence of view
- db = db.Order("current_sequence DESC")
-
- sequences := make([]*CurrentSequence, 0)
- query := PrepareSearchQuery(table, searchRequest)
- _, err := query(db, &sequences)
- if err != nil {
- return nil, err
- }
- return sequences, nil
-}
-
-func AllCurrentSequences(db *gorm.DB, table, instanceID string) ([]*CurrentSequence, error) {
- queries := make([]sequenceSearchQuery, 0, 1)
- if instanceID != "" {
- queries = append(queries, sequenceSearchQuery{key: sequenceSearchKey(SequenceSearchKeyInstanceID), value: instanceID})
- }
- sequences := make([]*CurrentSequence, 0)
- query := PrepareSearchQuery(table, &sequenceSearchRequest{queries: queries})
- _, err := query(db, &sequences)
- if err != nil {
- return nil, err
- }
- return sequences, nil
-}
-
-func ClearView(db *gorm.DB, truncateView, sequenceTable string) error {
- truncate := PrepareTruncate(truncateView)
- err := truncate(db)
- if err != nil {
- return err
- }
- return SaveCurrentSequences(db, sequenceTable, truncateView, 0, time.Now())
-}